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

如何向R语言terra::roll()传递带参数的自定义几何均值函数?

解决terra::roll传递额外参数给自定义几何均值函数的问题

问题根源

  1. 你的rollgm函数未定义floor等额外参数,也未通过可变参数...接收这类参数,导致调用时触发"unused argument"错误。
  2. terra::roll的fun参数默认不会自动将外部参数传递给自定义函数,需要显式绑定参数。

具体解决步骤

1. 确认自定义geomean函数(示例)

假设你的几何均值函数实现如下:

geomean <- function(x, floor = 0, na.rm = FALSE) {
  # 应用floor阈值
  x[x < floor] <- floor
  # 计算几何均值(处理非正数/NA)
  if (all(is.na(x)) && na.rm) return(NA)
  exp(mean(log(x[x > 0]), na.rm = na.rm))
}

2. 重构rollgm函数

使用...接收所有额外参数,并在terra::roll的fun中通过匿名函数将参数传递给geomean:

rollgm <- function(d, N, type, ...) {
  terra::roll(
    x = d,
    N = N,
    type = type,
    fun = function(window_x) geomean(window_x, ...)
  )
}

3. 正常调用测试

现在可以直接传递floor、na.rm等参数:

# 示例调用
rollgm(d, N=5, type='to', floor=0.5, na.rm=TRUE)

核心原理

  • ...作为可变参数,能接收任意数量的未显式定义的参数,避免逐个声明所有可能的参数。
  • 匿名函数function(window_x) geomean(window_x, ...)将外部传入的额外参数(如floor=0.5)绑定到geomean的调用中,确保每个滚动窗口的计算都能使用这些参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:25:03