如何用R语言terra::app/rapp计算同参数栅格的像元总和与均值
Terra包多图层像元统计及
rapp参数说明 需求梳理
- 读取目录下所有名称包含
2000的TIFF文件 - 将所有TIFF统一裁剪至相同范围并转换到目标坐标系
- 对8个图层做逐像元总和、均值计算,输出
rast对象;核心疑问是terra::rapp的start/end参数用法
修正后的完整代码
# 1. 读取目标TIFF文件 tif_paths <- list.files(path = "Pop", pattern = "*2000.tif", full.names = TRUE, recursive = TRUE) all_tifs <- rast(tif_paths) # 2. 标准化范围与坐标系(需提前定义裁剪矢量shp、目标坐标系/参考栅格pp) standardized_tifs <- all_tifs %>% mask(shp) %>% # 按矢量范围掩膜 trim() %>% # 裁剪至掩膜后的有效范围 project(crs(pp)) # 转换到目标坐标系 # 3. 逐像元计算总和与均值(使用rapp) # start=1、end=8指定处理第1至第8个图层 sum_rast <- rapp(standardized_tifs, fun = sum, start = 1, end = 8) mean_rast <- rapp(standardized_tifs, fun = mean, start = 1, end = 8) # 可选:合并结果为单个rast对象 result_rast <- c(sum_rast, mean_rast) names(result_rast) <- c("pixel_sum", "pixel_mean")
rapp函数start/end参数详解
start:设置待处理图层的起始索引,比如start=1表示从第1个图层开始计算end:设置待处理图层的结束索引,比如end=8表示处理到第8个图层为止- 这两个参数用于限定函数的处理范围,当你有大量图层但仅需分析其中一段时,能精准控制计算目标;若不指定,默认处理所有图层。
替代方案:使用terra::app实现
app函数的用法更直观,直接通过图层索引选取目标范围即可:
# 选取第1-8层,逐像元计算总和与均值 sum_rast <- app(standardized_tifs[[1:8]], fun = sum) mean_rast <- app(standardized_tifs[[1:8]], fun = mean)
内容的提问来源于stack exchange,提问作者Wei Liao
相关产品推荐
相关产品推荐

