为什么".."可以在字符向量变量中传递列名?

R Y*_*oda 12 r data.table

以下代码确实有效,但我找不到任何关于帮助和插图中" .."(点点)运算符的文档data.table:

library(data.table)
cols <- c("mpg", "gear")
DT <- as.data.table(mtcars)
DT[ , ..cols]
Run Code Online (Sandbox Code Playgroud)

输出是:

     mpg gear
 1: 21.0    4
 2: 21.0    4
 3: 22.8    4
 4: 21.4    3
 5: 18.7    3
...
Run Code Online (Sandbox Code Playgroud)

为什么这样做,是否有任何文件?

PS:通常我会使用mget等...

编辑1:这不是保留名称的一个简单的ř特征...,..1,..2等等,这些都是用来指从主叫功能(参见向下传递的参数?Reserved).我的例子不使用数字,而是使用两个点后的字符.

编辑2:这不重复,因为Rich Scriven的示例显示:

> mtcars[, ..cols]
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found
Run Code Online (Sandbox Code Playgroud)

Ric*_*ven 9

这是data.table v1.10.2中添加的一个新的实验性功能.对于v1.10.2中的更改,data.table新闻NEW FEATURES部分对此进行了解释.

它读(直接引用):

何时j是带有前缀的符号..,将在调用范围中查找,其值被视为列名或数字.

myCols = c("colA","colB")
DT[, myCols, with=FALSE]
DT[, ..myCols]              # same
Run Code Online (Sandbox Code Playgroud)

当你看到..前缀时,就像..所有操作系统中的目录一样意味着父目录.将来,..可以使前缀适用于内部任何位置的所有符号DT[...].它旨在成为保护代码不会意外获取列名的便捷方法.如何相似x.i.前缀(类似于SQL表的别名)已经可以用来消除存在于相同的列名xi.如果您希望在表达式中安全地使用调用范围中的许多变量,那么符号前缀而不是..() 函数将更容易在内部进行优化并且更方便.这个功能最初是在2012年提出的,并且长期以来一直希望#633.这是实验性的.

注意: Arun的回答让我了解了这些信息.