在函数中使用 terra::ifel

问题描述 投票:0回答:1

我是 terra 的新手,必须通过一组错综复杂的嵌套条件循环大量

rast
对象。我已经使用
ifel
将其全部写出来,但不确定如何创建一个可以与
lapp
一起使用的函数。

r <- c(rast(matrix(1:25, nrow=5, ncol=5)),
       rast(matrix(11:35, nrow=5, ncol=5)))
names(r)[2] <- "lyr.2"

r2 <- ifel(r["lyr.1"] > 20,100,
           ifel(r["lyr.1"] <=5 & r["lyr.2"]>10, 200,
                ifel(r["lyr.2"] <= 10 & r["lyr.1"] > 5, 300,
                     9999)))
plot(r2)

假设

r
将是一个具有一致命名图层的栅格,我如何使用函数和
r2
来制作
lapp

非常感谢。

r geospatial terra
1个回答
0
投票

你做了一个这样的函数

f <- function(x) {
    ifel(x["lyr.1"] > 20,100,
     ifel(x["lyr.1"] <=5 & x["lyr.2"]>10, 200,
      ifel(x["lyr.2"] <= 10, 300, 9999)))
}

r2 <- f(r)

如果您有列表或 SpatRasterDataset,您可以将其与

lapply
一起使用。

x <- list(r,r) 
# or
# x <- sds(r, r)
y <- lapply(x, f)

如果你想使用

lapp
你可以像这样重写函数

ff <- function(x, y) {
    ifelse(x > 20, 100,
     ifelse(x <=5 & y > 10, 200,
      ifelse(x <= 10, 300, 9999)))
}

然后做

x <- sds(r, r)
z <- lapp(x, ff)
© www.soinside.com 2019 - 2024. All rights reserved.