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)
这是data.table v1.10.2中添加的一个新的实验性功能.对于v1.10.2中的更改,data.table新闻的NEW FEATURES部分对此进行了解释.
它读(直接引用):
何时
j
是带有前缀的符号..
,将在调用范围中查找,其值被视为列名或数字.Run Code Online (Sandbox Code Playgroud)myCols = c("colA","colB") DT[, myCols, with=FALSE] DT[, ..myCols] # same
当你看到
..
前缀时,就像..
所有操作系统中的目录一样意味着父目录.将来,..
可以使前缀适用于内部任何位置的所有符号DT[...]
.它旨在成为保护代码不会意外获取列名的便捷方法.如何相似x.
和i.
前缀(类似于SQL表的别名)已经可以用来消除存在于相同的列名x
和i
.如果您希望在表达式中安全地使用调用范围中的许多变量,那么符号前缀而不是..()
函数将更容易在内部进行优化并且更方便.这个功能最初是在2012年提出的,并且长期以来一直希望#633.这是实验性的.
注意: Arun的回答让我了解了这些信息.