光栅中价值替换的不良后果

时间:2013-11-08 16:53:21

标签: r replace raster

我正在使用基于遥感的光栅文件,请参阅她的压缩示例文件: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"))。这让我觉得它可能与文件格式有关?

干杯!

1 个答案:

答案 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