2013-05-27 48 views
7

如何编写一个足够灵活的主函数来将多个参数传递给多个函数?简单的尝试都失败了:将省略号参数传递给两个不同的函数?

> 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) 

我可以看到这是如何通过检查甲醛和省略号每个功能的甲缩醛匹配调用参数是可能的。但是有更好的方法吗?

+3

你可以通过列表的子功能之一,即'MAINF < - 函数(f1,f2,...,args.f2 = list())'。 – baptiste

+0

除了成语@baptiste提及(它常常用于R源),你进入了参数处理领域。你可以抓住'...',通过'formals()'得到'f1'和'f2'的参数名,然后处理抓取的'...'列表以提取每个函数的参数。然而,当'f1'和'f2'具有相同的命名参数时会发生什么?这就是为什么baptiste的想法很简单;你只需要'do.call(f2,args.f2)'用用户指定的正确的一组参数调用'f2'。 –

+0

这是一个很棒的成语。我可能在R的基础上看过它一百万次,但是出于某种原因我没有这样做。 @baptiste发帖作为答案? –

回答

3

您可以通过列表的子功能之一,即

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)) 

(未经测试,但你得到的要点)

相关问题