更高效的栅格重分类
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))
我有一个 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))