在R中使用多个省略号参数

时间:2011-02-22 16:33:28

标签: r

R函数中是否可以有多个省略号参数?我正在尝试做的简化版本是:

plotgenerator<-function(x,y,...,...,...){
   plot(x,y,...)
   axes(...)
   legend(...)
   }

我的想法是使用可选的字符串参数,如下所示:

plotgenerator<-function(x,y,plotargs="",axesargs="",legendargs=""){
   plot(x,y,plotargs)
   axes(axesargs)
   legend(legendargs)
   }

但这不起作用。有谁知道这样的事情是否可能?我已经搜索了很多,但是像“R ......”这样的搜索字符串实际上并没有很大帮助;)

2 个答案:

答案 0 :(得分:12)

如果您使用do.call,则可以使用类似于您的第二选择的内容,这允许您将参数作为列表传递给函数。例如。将axesarg作为列表传递,然后在您的函数中传递:do.call(axes,axesarg)

例如:

outer_fxn <- function(inner_args=list(), ...) {
    do.call(inner_fxn, inner_args)
}

inner_fxn <- function(...) {
    # do stuff
}

# function call
outer_fxn(inner_args=list(a=1, b=2), outer_arg1=3, etc)

在上文中,inner_fxn ...应处理的任何参数都应该在inner_args列表中传递。 outer_fxn ...个参数照常处理。

答案 1 :(得分:3)

不支持您展示的第一种方式,因为解析器无法知道调用者希望参数进入哪一组点。

您可以将这些点捕捉到一个列表中并使用以下内容进行操作:

mydots <- list(...)

然后,您可以复制,删除不适合您正在调用的函数的项目,然后使用do.call(如上所述)来调用您的函数。

如果您认为调用者可能希望向具有相同参数名称的不同函数发送不同的值,则第二种方法可能更清晰。再次使用do.call传递参数列表。