我有一個RasterStack
s1
由包含來自島嶼的數據的400個圖層組成。柵格的範圍被裁剪到島的範圍內,但由於其不規則的形狀,只有大約20%的像素實際上是土地面積並具有數據值;另外80%是水和NA
。柵格:僅在其他柵格圖層中沒有NA的情況下在RasterStack上計算
我也有一個地水面具lwm
(RasterLayer
),其中土地編碼爲1和水爲NA
。
我想對s1
做不同種類的基於單元格的計算,但注意到這些需要很長時間才能完成。爲了加快速度,只能對土地面積的細胞進行計算,而水域應始終爲NA
。在僞代碼中:
for each cell:
if cell is land
do calculation
if cell is water
return(NA)
需求是memory-safety
。
下面是一些樣本數據來說明問題:
library(raster)
# generate data
lwm <- raster(nrow = 5, ncol = 5)
lwm[] <- c(rep(NA, 10), rep(1, 5), rep(NA, 10))
r1 <- raster(nrow = 5, ncol = 5)
r1[] <- runif(ncell(r1)) * 10
r2 <- raster(nrow = 5, ncol = 5)
r2[] <- runif(ncell(r2)) * 10
s1 <- stack(r1, r2)
s1 <- mask(s1, lwm)
# this works, but all NA-values on water are also unnecessarily evaluated
calc(s1, function(x) {sum(!is.na(x))})
在這種情況下,也許它可能是更好地識別非NA單元的索引,只從光柵中提取這些像素,進行計算,然後將結果「返回」到新的光柵中。 – lbusett
這種方法是否安全?在我看來,對於一個非常大的'RasterStack'來說,情況並非如此,是嗎? –
不,這對於非常大的柵格來說不是內存友好的(除非你的「良好數據」區域非常小)。 – lbusett