在函数中使用`...`(三点或点点)

时间:2011-05-04 22:26:50

标签: r ellipsis

在哪里可以找到有关函数中...用法的文档?例子很有用。

3 个答案:

答案 0 :(得分:70)

用于描述...的词是“省略号”。了解这一点应该可以更容易地搜索有关构造的信息。例如,Google上的第一个问题是此网站上的另一个问题:How to use R's ellipsis feature when writing your own function?

答案 1 :(得分:47)

一个让你入门的小例子。

f <- function(x, ...)
{
  dots <- list(...)                   #1
  if(length(dots) == 0) return(NULL) 
  cat("The arguments in ... are\n")
  print(dots)
  f(...)                              #2
}

f(1,2,3,"a", list("monkey"))

函数f在省略号变量中存储除第一个输入参数之外的所有参数。要访问其内容,最简单的方法是将其转换为列表(1)。然而,主要用途是将参数传递给子函数,这不需要转换(2)。

答案 2 :(得分:18)

您应该转到“R语言定义”, 2.1.9 Dot-dot-dot 部分。它与R安装捆绑在一起。在交互式会话中运行help.start()以启用HTML帮助,然后单击 R语言定义链接。您也可以使用主网站上的PDFHTML版本。

无论如何,...用于匹配函数的未指定形式参数。

args(sapply)                                                                                                               
function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)                                                                    
NULL   

sapply(mtcars, mean, trim = .5)                                                                                            
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear                                              
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000                                              
   carb                                                                                                                      
  2.000 

正如您所看到的,我通过了trim = .5,虽然它未被指定为sapply函数的正式参数。

(请注意,此示例很简单,您可以使用sapply(mtcars, median)来获得相同的结果)