1# Authors: Robert J. Hijmans
2# Date :  January 2009
3# Version 0.9
4# Licence GPL v3
5
6
7setMethod("is.na", signature(x='Raster'),
8	function(x) {
9		if (nlayers(x) > 1) {
10			r <- brick(x, values=FALSE)
11		} else {
12			r <- raster(x)
13		}
14
15		if (canProcessInMemory(r, 3)) {
16			dataType(r) <- 'LOG1S'
17			return( setValues(r, is.na(getValues(x))) )
18		} else {
19			tr <- blockSize(x)
20
21			pb <- pbCreate(tr$n, label='is.na')
22			r <- writeStart(r, filename=rasterTmpFile(), datatype='LOG1S', format=.filetype(), overwrite=TRUE )
23			for (i in 1:tr$n) {
24				v <- is.na( getValuesBlock(x, row=tr$row[i], nrows=tr$nrows[i]) )
25				r <- writeValues(r, v, tr$row[i])
26				pbStep(pb, i)
27			}
28			r <- writeStop(r)
29			pbClose(pb)
30
31			return(r)
32		}
33	}
34)
35
36
37
38setMethod("is.nan", signature(x='Raster'),
39	function(x) {
40		if (nlayers(x) > 1) {
41			r <- brick(x, values=FALSE)
42		} else {
43			r <- raster(x)
44		}
45
46		if (canProcessInMemory(r, 3)) {
47			dataType(r) <- 'LOG1S'
48			return( setValues(r, is.nan(getValues(x))) )
49		} else {
50			tr <- blockSize(x)
51
52			pb <- pbCreate(tr$n, label='is.na')
53			r <- writeStart(r, filename=rasterTmpFile(), datatype='LOG1S', format=.filetype(), overwrite=TRUE )
54			for (i in 1:tr$n) {
55				v <- is.nan( getValuesBlock(x, row=tr$row[i], nrows=tr$nrows[i]) )
56				r <- writeValues(r, v, tr$row[i])
57				pbStep(pb, i)
58			}
59			r <- writeStop(r)
60			pbClose(pb)
61
62			return(r)
63		}
64	}
65)
66
67
68
69
70setMethod("is.finite", signature(x='Raster'),
71	function(x) {
72		if (nlayers(x) > 1) {
73			r <- brick(x, values=FALSE)
74		} else {
75			r <- raster(x)
76		}
77		if (canProcessInMemory(r, 3)) {
78			dataType(r) <- 'LOG1S'
79			return( setValues(r, is.finite(getValues(x))) )
80		} else {
81			tr <- blockSize(x)
82
83			pb <- pbCreate(tr$n, label='is.na')
84			r <- writeStart(r, filename=rasterTmpFile(), datatype='LOG1S', format=.filetype(), overwrite=TRUE )
85			for (i in 1:tr$n) {
86				v <- is.finite( getValuesBlock(x, row=tr$row[i], nrows=tr$nrows[i]) )
87				r <- writeValues(r, v, tr$row[i])
88				pbStep(pb, i)
89			}
90			r <- writeStop(r)
91			pbClose(pb)
92
93			return(r)
94		}
95	}
96)
97
98
99
100
101setMethod("is.infinite", signature(x='Raster'),
102	function(x) {
103		if (nlayers(x) > 1) {
104			r <- brick(x, values=FALSE)
105		} else {
106			r <- raster(x)
107		}
108
109		if (canProcessInMemory(r, 3)) {
110			dataType(r) <- 'LOG1S'
111			return( setValues(r, is.infinite(getValues(x))) )
112		} else {
113			tr <- blockSize(x)
114
115			pb <- pbCreate(tr$n, label='is.na')
116			r <- writeStart(r, filename=rasterTmpFile(), datatype='LOG1S', format=.filetype(), overwrite=TRUE )
117			for (i in 1:tr$n) {
118				v <- is.infinite( getValuesBlock(x, row=tr$row[i], nrows=tr$nrows[i]) )
119				r <- writeValues(r, v, tr$row[i])
120				pbStep(pb, i)
121			}
122			r <- writeStop(r)
123			pbClose(pb)
124
125			return(r)
126		}
127	}
128)
129
130