更高效的栅格重分类

More efficient raster reclassification

我有一个 raster,其中第一列必须重新分类,将所有其他值保留为 NA。我已经编写了执行此操作的代码(如下),但是随着光栅大小的增长远远超出这个玩具示例,它的效率非常低。

有人可以推荐一种更有效的方法来重写这段代码,以便它可以处理更大的光栅文件吗?我怀疑 apply() 在这里可能会有用,但我不确定该往哪个方向发展。

r<-raster::raster(nrow=10, ncol=10)
r[]<-NA

  for(i in 1:r@nrows){
    r[(r@nrows*i)-(r@ncols-1)]<-2

  }

首先是一个更好的方法来做你所做的事情

library(raster)
r <- raster::raster(nrow=10, ncol=10)
for(i in 1:nrow(r)){
    r[i, 1] <- 2
}

更好的选择

r <- raster::raster(nrow=10, ncol=10)
r[,1] <- 2

但对于较大的栅格,最好是

r <- raster::raster(nrow=10, ncol=10)
xy <- cbind(xFromCol(r, 1), yFromRow(r, 1:nrow(r)))
r <- rasterize(xy, r, field=2)

这样效率可能较低

r <- raster::raster(nrow=10, ncol=10)
r <- init(r, "col")
r <- reclassify(r, rbind(c(1,1,2), c(2,Inf,NA)), right=TRUE, include.lowest=TRUE)

同样的想法,非常简洁

r <- subs(init(r, "col"), data.frame(from=1, to=2))