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

使用terra与raster包计算栅格栈累积和时结果异常的问题排查

问题:terra包rapp计算栅格累积和结果异常的原因

你手动计算的rr1是栅格栈s中每个像元从第1层到第6层的累积和最终值(即所有层的总和),raster包calc函数用法正确,因此rr3与rr1结果一致,但terra包rapp的用法存在两处关键错误,导致结果异常:

1. 对rapp函数的作用理解偏差

terra::rapp是层维度的滑动窗口运算函数,核心是对栅格栈的连续w层组成的滑动窗口应用自定义函数,而非对每个像元的所有层直接计算。比如w=3时,会依次处理第1-3层、第2-4层……直到最后一组连续层。
你需要的是每个像元从第1层到第6层的累积和最终值,这种场景应该用terra::app函数(对每个像元的所有层应用函数),而非rapp。

2. rapp的参数传递错误

你调用rapp时传入了s[[1]]作为第二个参数y,这完全多余:

  • 当y参数存在时,fun需要接收两个输入参数(分别对应x的滑动窗口层和y的对应层),但你的函数只定义了一个参数i,这会导致函数接收的输入不符合预期,计算逻辑彻底出错。
  • 即使去掉y参数,用rapp(s, w=6, function(i) max(cumsum(i)))也属于用错工具——虽然结果可能巧合一致,但rapp的设计目标并非处理全栈单像元计算,app才是正确选择。

正确的terra实现方式

如果要得到和rr1、rr3一致的结果,用app函数即可:

# 方式1:取累积和的最后一个值(即总和)
rr2 <- app(s, function(x) cumsum(x)[6])
# 方式2:直接求和(因为累积和最后一步就是所有层的总和)
rr2 <- sum(s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:01:18