嵌套函数中的省略号扩展:错误“'...'在不正确的上下文中使用”

时间:2013-12-13 18:11:00

标签: r function

我有一段非常简单的代码可以产生:

afun <- function(a) {
  return(bfun(...))
}
bfun <- function(...) {
  return(a + 1)
}

> afun(1)
Error in afun(1) : '...' used in an incorrect context

但是R在这里不喜欢什么?

2 个答案:

答案 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 = " "))