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

Bra*_*sen 80 r ellipsis

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

Joh*_*nck 72

用来描述的词...是"省略号".了解这一点应该可以更容易地搜索有关构造的信息.例如,Google上的第一个热门话题是本网站上的另一个问题:如何在编写自己的函数时使用R的省略号功能?

  • 实际上,R 中的官方名称是“dots”,例如帮助页面名为“?dots”,页面上甚至没有提到“省略号” (5认同)

Ric*_*ton 51

一个让你入门的小例子.

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"))
Run Code Online (Sandbox Code Playgroud)

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

  • 这也是演示 `...length()` 的一个很好的例子 (3认同)

aL3*_*3xa 19

您应该转到"R语言定义",第2.1.9Dot-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 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我通过trim = .5它并没有被指定为sapply函数的正式参数.

(注意这个例子很简单,你可以sapply(mtcars, median)用来实现相同的结果)

  • 如果没有指定,你怎么知道它是合法的或有效的? (3认同)
  • @qed `trim` 是 `mean` 函数的参数。`sapply` 中的 `...` 是将 `trim` 传递给 `mean` 的机制。 (2认同)