2011-08-30 29 views
17

當我看的[[.data.frame我的電腦上的內容,這就是我得到:」 ..1" 中的身體‘[[.data.frame’

> get("[[.data.frame") 
function (x, ..., exact = TRUE) 
{ 
    na <- nargs() - (!missing(exact)) 
    if (!all(names(sys.call()) %in% c("", "exact"))) 
     warning("named arguments other than 'exact' are discouraged") 
    if (na < 3L) 
     (function(x, i, exact) if (is.matrix(i)) 
      as.matrix(x)[[i]] 
     else .subset2(x, i, exact = exact))(x, ..., exact = exact) 
    else { 
     col <- .subset2(x, ..2, exact = exact) 
     i <- if (is.character(..1)) 
      pmatch(..1, row.names(x), duplicates.ok = TRUE) 
     else ..1 
     .subset2(col, i, exact = exact) 
    } 
} 
<environment: namespace:base> 

我已經習慣了到...,但這是我第一次看到..1..2。在R的幫助和谷歌的快速搜索返回大多垃圾,因爲點通常被解釋爲佔位符,所以我希望有人在這裏可以給我一個指針?或者我錯過了顯而易見的東西?這些來自哪裏,我如何使用它們?

回答

16

這是一種參考...特殊pairlist的第1,第2,...元素的方法。所以..1就是指...的第一個元素,..2是指第二個元素的...等等。

這在R Internals手冊第1.5.2 Dot-dot-dot arguments提到的,相關的位,它是:

...值是一個(特殊)成對列表,其元素由特殊符號被稱爲..1..2 ,...設置了DDVAL位:當遇到其中一個時,在查找框中查找...符號的值(通過ddfindVar)。

5

爲了增加加文的回答是:

他們還保留字(?Reserved)幫助頁面簡要提及。

一個非常簡單的用法的例子是

f <- function(...) print(..1) 
f(x = 99) #prints 99 
f()  #throws an error