我有一段非常简单的代码可以产生:
afun <- function(a) {
return(bfun(...))
}
bfun <- function(...) {
return(a + 1)
}
> afun(1)
Error in afun(1) : '...' used in an incorrect context
但是R在这里不喜欢什么?
答案 0 :(得分:5)
在您的函数afun
中:
afun <- function(a) {
return(bfun(...))
}
...
只是一个参数(没有默认值),就像任何其他参数一样。它并不意味着“自动吸收传递给父函数的所有参数”。就像您将bfun
定义为:
bfun <- function(b) {
return(b + 1)
}
然后尝试做:
afun <- function(a) {
return(bfun(b))
}
为了将a
传递给bfun
,您必须使用类似match.call
的内容自行收集该参数,或者您必须对其进行硬编码(例如{{ 1}}),或者你必须使用return(bfun(a))
作为...
的参数(和唯一的参数)。
通常,afun
用于将其他参数传递给后续函数。
答案 1 :(得分:2)
如果希望afun
返回带有可变数量参数的函数,则返回bfun
作为返回值afun
。在R中,这些被称为closures
这就是你得到的:
afun <- function(a) {
print(a)
function (b, ...){
print(paste(b, ..., sep = " "))
}
}
结果是:
bfun <- afun("in afun body") # "in afun body from print(a)
bfun("arg1") # "arg1" from print(paste(b, ..., sep = " "))
bfun("arg1", "arg2", "arg3") # "arg1 arg2 arg3" from print(paste(b, ..., sep = " "))