我正在使用基于遥感的光栅文件,请参阅她的压缩示例文件:ftp://ftp.glcf.umd.edu/glcf/GLOPEM/10_Day/011_020/1992_011_020_npp_latlon/1992_011_020_npp_latlon.tif.gz。
为了进一步分析,我想将值为-999(即水)的细胞更改为NA。我试过了:
for (i in 1:length(nlist)){
r=raster(nlist[i])
calc( r , function(x) { x[ x == -999 ] <- NA; return(x) } ,overwrite=T, filename=paste(names(r),"NA_edited"), format="GTiff")
}
f2 <- function(x) {
v <- getValues(x)
v[v<0]<-NA
x <- setValues(x, v)
return(x)
}
和
for (i in 1:length(nlist)){
r=raster(nlist[i])
r=f2(r)
writeRaster(r,filename=paste(names(r),"NA_edited"), format="GTiff",overwrite=T)
}
其中nlist是文件位置的向量(即list.files())。
他们确实摆脱了-999并创建了NA值,但由于某种原因,它们也会改变其他值。似乎所有值都略高,例如一层的最大值从160到177。
是否有一些插值正在进行,或者是否有一些我错过的魔力?我无法在示例光栅上重现这一点,例如raster(system.file("external/test.grd", package="raster"))
。这让我觉得它可能与文件格式有关?
干杯!
答案 0 :(得分:2)
由于您使用的是raster
软件包,请尝试使用函数NAvalue
在栅格中指定NA
值,而不是使用{{1}手动替换-999值}的
根据NA
:
NAvalue返回用于将NA值写入磁盘的值(in 'raster'类型文件)。如果设置Raster *对象的NA值, 从a中读取值时,此值将被解释为NA 文件。内存中的值不会受到影响。
如果NA值小于零,则所有值都小于或等于 该号码将设置为NA。
帮助文件中的示例:
?NAvalue
对于您的问题,您可以加载栅格(例如r1 <- raster(system.file("external/rlogo.grd", package="raster"))
r2 <- r1
NAvalue(r2)
NAvalue(r2) <- 255
#plot(r1)
#plot(r2)
),然后使用函数r <- raster(file)
,它应该使用{{1}指定栅格NAvalue(r) <- -999
中的所有值} {} r
。