如何向R语言terra::roll()传递带参数的自定义几何均值函数?
解决terra::roll传递额外参数给自定义几何均值函数的问题
问题根源
- 你的
rollgm函数未定义floor等额外参数,也未通过可变参数...接收这类参数,导致调用时触发"unused argument"错误。 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
相关产品推荐
相关产品推荐

