以下代码确实有效但我在..
帮助和插图中找不到关于“data.table
”(点点)运算符的任何文档:
library(data.table)
cols <- c("mpg", "gear")
DT <- as.data.table(mtcars)
DT[ , ..cols]
输出结果为:
mpg gear
1: 21.0 4
2: 21.0 4
3: 22.8 4
4: 21.4 3
5: 18.7 3
...
为什么这样做,是否有任何文件?
PS:通常我会使用mget
等...
编辑1:这不是保留名称...
,..1
,..2
等的普通R功能,用于指代从调用函数传递的参数(参见?Reserved
)。我的例子不是使用数字,而是使用两个点之后的字符。
编辑2:这不重复,,如Rich Scriven的示例所示:
> mtcars[, ..cols]
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found
答案 0 :(得分:7)
这是 data.table v1.10.2中添加的新的实验性功能。它在NEW FEATURES section of the data.table news for changes in v1.10.2中解释。
它读取(直接引用):
当
j
是带有..
前缀的符号时,它将在调用范围中被查找,其值被视为列名或数字。myCols = c("colA","colB") DT[, myCols, with=FALSE] DT[, ..myCols] # same
当您看到
..
前缀认为 one-level-up 时,就像所有操作系统中的目录..
一样,意味着父目录。将来可以使..
前缀适用于DT[...]
内任意位置的所有符号。它旨在成为保护代码不会意外获取列名的便捷方法。与x.
和i.
前缀(类似于SQL表别名)的方式类似,可以用于消除x
和i
中存在的相同列名的歧义。如果您希望在表达式中安全地使用调用范围中的许多变量,那么符号前缀而不是..()
函数将更容易在内部进行优化并且更方便。此功能最初是在2012年提出的,并且一直希望#633。这是实验性的。
注意: This answer by Arun让我了解了这些信息。