R 将省略号参数传递给两个不同的函数?

R 将省略号参数传递给两个不同的函数?,r,R,如何编写一个足够灵活的主函数,以便将额外的参数传递给多个函数?简单尝试失败: > mainF <- function(f1,f2,...) { + f2( X=f1(...), ... ) + } > mainF(function(x) x, function(X, y) X*y, x=5, y=3) Error in f2(X = f1(...), ...) : unused argument (x = 5) >mainF mainF(函数(x)x,函数(x,y)x

如何编写一个足够灵活的主函数,以便将额外的参数传递给多个函数?简单尝试失败:

> mainF <- function(f1,f2,...) {
+     f2( X=f1(...), ... )
+ }
> mainF(function(x) x, function(X, y) X*y, x=5, y=3)
Error in f2(X = f1(...), ...) : unused argument (x = 5)
>mainF mainF(函数(x)x,函数(x,y)x*y,x=5,y=3)
f2中的错误(X=f1(…),…):未使用的参数(X=5)

通过检查形式并将省略号中的调用参数与每个函数的形式匹配,我可以看出这是如何实现的。但是,还有更好的方法吗?

您可以将列表传递给其中一个子功能,即

mainF <- function(f1, f2, ..., args.f2 = list()) {
     do.call(f2, c(X=f1(...), args.f2))
}

mainF(function(x) x, function(X, y) X*y, x=5, args.f2 = list(y=3))

main如果您可以将一个列表传递给其中一个子函数,即`main而不是@baptiste提到的惯用语(在R源代码中经常使用),那么您就进入了参数处理领域。您可以抓取
..
,通过
formals()
获取
f1
f2
的参数名称,然后处理抓取的
..
列表以提取每个函数的参数。但是,当
f1
f2
具有相同的命名参数时会发生什么情况?这就是为什么巴普蒂斯特的想法很简单;您只需
do.call(f2,args.f2)
即可使用用户指定的正确参数集调用
f2
。这是一个很好的习惯用法。我可能在BaseR中见过无数次,但出于某种原因,我没有想到这样做@巴普蒂斯特邮报作为答案?你可能还想看看@Henrik,太好了。投票以重复方式结束。