У меня есть 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))
Спаси меня еще раз... спасибо Роберту за все возможные подходы к этому вопросу!