You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写函数配合lapp,使用terra::ifel处理批量rast对象?

Terra批量处理栅格:封装嵌套条件函数配合lapply使用

1. 封装条件处理函数

把你已有的嵌套ifel逻辑封装成独立函数,函数接受单个图层命名规范(包含lyr.1和lyr.2)的rast对象作为参数,返回处理后的栅格:

process_rast <- function(r) {
  result <- 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)))
  return(result)
}

2. 准备批量处理的栅格列表示例

将需要处理的多个rast对象存入列表(以下为测试用例):

# 创建测试栅格1
r1 <- c(rast(matrix(1:25, nrow=5, ncol=5)),
        rast(matrix(11:35, nrow=5, ncol=5)))
names(r1)[2] <- "lyr.2"

# 创建测试栅格2
r2 <- c(rast(matrix(26:50, nrow=5, ncol=5)),
        rast(matrix(36:60, nrow=5, ncol=5)))
names(r2)[2] <- "lyr.2"

# 创建测试栅格3
r3 <- c(rast(matrix(51:75, nrow=5, ncol=5)),
        rast(matrix(61:85, nrow=5, ncol=5)))
names(r3)[2] <- "lyr.2"

# 整理为待处理列表
rast_list <- list(r1, r2, r3)

3. 使用lapply批量处理

通过lapply遍历栅格列表,逐个应用处理函数,得到处理后的结果列表:

processed_list <- lapply(rast_list, process_rast)

# 查看第一个处理结果
plot(processed_list[[1]])

补充说明

  • 只要输入的rast对象图层命名固定为lyr.1和lyr.2,process_rast函数就能稳定执行逻辑。
  • 若需将处理后的栅格合并为多图层栅格,可使用c(processed_list)完成拼接。

内容的提问来源于stack exchange,提问作者user111024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:16:01