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