R:如何为函数添加参数(特别是`...`)?

时间:2013-10-31 13:15:45

标签: r functional-programming

我认为以下一点代码为这个问题提供了动力:

add <- function(x, y = 1) x + y
subtract <- function(x, z = 1) x - z
both <- function(x, ...) list(add(x, ...), subtract(x, ...))

both(1) 
# OK
both(1, z = 2)
# Error in add(x, ...) : unused argument (z = 2)

# a solution from a previous question I asked
add <- function(x, y = 1, ...) x + y
subtract <- function(x, z = 1, ...) x - z
both(1, z = 2)

所以我正在寻找一个名为add_dots的函数运算符,它接受函数f,并返回f...添加到其参数列表中

为任何帮助干杯

1 个答案:

答案 0 :(得分:5)

这似乎有效:

add <- function(x, y = 1) x + y
#> add
#function(x, y = 1) x + y
formals(add) <- c(formals(add), alist(... = ))
#> add
#function (x, y = 1, ...) 
#x + y

在@agstudy的评论之后,它的功能是:

add_dots <- function(FUN)
{
 f <- match.fun(FUN)
 formals(f) <- c(formals(f), alist(... = ))
 return(f)
}

add <- function(x, y = 1) x + y
#> add
#function(x, y = 1) x + y
add_dots(add)
#function (x, y = 1, ...) 
#x + y
new.add <- add_dots(add)
#> new.add
#function (x, y = 1, ...) 
#x + y