R legacy代码中FUN(...)与FUN(..1)作用差异及代码逻辑问询
问题解答
你的理解是否正确
你的理解完全正确。你调用famamacb()时传入的第二个匿名函数function(coef) list(tseries.tstat = apply(coef,2, cumtstat, na.rm = T, i = match(rownames(coef), rownames(time.weight))))就是代码里的FUN变量,该函数执行后确实会返回一个包含tseries.tstat字段的列表。
FUN(..1)的作用
R 语言的可变参数...支持通过..N格式直接提取第N个传入参数,..1就代表...里的第一个参数。
这段代码是根据calc.tstat的布尔值,给g分配不同的参数传递逻辑:
- 当
calc.tstat = TRUE时,g会把所有传入的参数原封不动传递给FUN,适配需要接收多个输入参数的FUN实现 - 当
calc.tstat = FALSE时,无论调用g时传入了多少个参数,都只会把第一个参数传递给FUN,其余参数会被直接丢弃
直观示例:如果
famamacb内部调用g(coef, time_weight, other_aux_param)
calc.tstat=TRUE时等价于执行FUN(coef, time_weight, other_aux_param)calc.tstat=FALSE时等价于执行FUN(coef)
你示例中传入的FUN仅需要接收coef一个参数,这种设计属于鲁棒性兼容逻辑:就算famamacb内部调用g时多传了其他辅助参数,只要calc.tstat = FALSE,就不会因为参数数量不匹配抛出错误。
内容的提问来源于stack exchange,提问作者Jasper C.
相关产品推荐
相关产品推荐

