r-使用terra的其他层来屏蔽光栅堆栈的层



我有一个由145个光栅组成的光栅堆栈。如果特定细胞的任何层中都有NA,我想在所有其他层中将该细胞设置为NA。我在下面设计了一种方法,但我不确定它是否有效。我会很感激有更好的方法吗?

library(terra)
a <- rast(ncol = 2, nrow = 2)
values(a) <- c(1,2,3,4)
names(a) <- "layer_one"
b <- rast(ncol = 2, nrow = 2)
values(b) <- c(1,2,3,4)
names(b) <- "layer_two"
c <- rast(ncol = 2, nrow = 2)
values(c) <- c(1,2,3,NA)
names(c) <- "layer_three"
z <- c(a,b,c)
my_layer_mask <- app(z, mean)
masked_z <- mask(z, my_layer_mask)
values(masked_z)
layer_one layer_two layer_three
[1,]         1         1           1
[2,]         2         2           2
[3,]         3         3           3
[4,]        NA        NA          NA

我不确定这是否更有效,但可能更清楚一点:

m <- any(is.na(z)) 
masked_z <- mask(z, m, maskvalue=TRUE)

用";terra";版本1.6-19您可以使用anyNA

masked_z <- mask(z, anyNA(z), maskvalue=TRUE)

最新更新