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

如何用R语言terra::app/rapp计算同参数栅格的像元总和与均值

Terra包多图层像元统计及rapp参数说明

需求梳理

  1. 读取目录下所有名称包含2000的TIFF文件
  2. 将所有TIFF统一裁剪至相同范围并转换到目标坐标系
  3. 对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:27:41