“[.data.frame”的正文中的“.1”

时间:2011-08-30 12:23:18

标签: r dataframe ellipsis

当我在PC上查看[[.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帮助和谷歌返回主要是垃圾,因为点通常被解释为占位符,所以我希望有人在这里可以给我一个指针?还是我错过了一些非常明显的东西?这些来自何处以及如何使用它们?

2 个答案:

答案 0 :(得分:16)

这是一种引用...特殊画布的第1,第2 ......元素的方法。因此..1是引用...的第一个元素的方式,..2是指...的第二个元素,依此类推。

R Internals手册的1.5.2 Dot-dot-dot arguments部分提到了这一点,其中相关部​​分是:

  

...的值是(特殊)pairlist,其元素由特殊符号..1..2引用,... DDVAL位set:当遇到其中一个时,会在评估框架中的ddfindVar符号的值中查找(通过...)。

答案 1 :(得分:5)

添加到Gavin的答案:

在保留字(?Reserved)的帮助页面中也简要提到了它们。

一个非常简单的使用示例是

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