我是 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
?
非常感谢。
你做了一个这样的函数
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)