如何编写函数配合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
相关产品推荐
相关产品推荐

