以下代码可以正常工作,但..
在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
等等,这些都用于指将参数从一个调用函数(参见传下来?Reserved
)。我的示例使用的不是数字,而是两个点后的字符。
编辑2:这不是重复项,如Rich Scriven的示例所示:
> mtcars[, ..cols]
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found
这是data.table v1.10.2中新增的实验性功能。在data.table news的NEW FEATURES部分中说明了v1.10.2中的更改。
读取(直接引用):
当
j
与前缀符号..
将在呼叫范围进行查找,并采取它的值是列名或数字。myCols = c("colA","colB") DT[, myCols, with=FALSE] DT[, ..myCols] # same
当您看到
..
前缀时,请像所有操作系统中的目录(即父目录)一样向上升级..
。将来..
可以使该前缀适用于所有内部出现的符号DT[...]
。它旨在作为一种方便的方法来保护您的代码以免意外选择列名。类似于x.
和i.
前缀(类似于SQL表别名)已可以用于消除x
和中存在的相同列名的歧义i
。符号前缀而不是..()
函数如果您在调用范围中有许多变量希望安全地在表达式中使用,则对于我们内部优化将更容易,并且更加方便。此功能于2012年首次提出,并长期以来一直希望获得#633的支持。这是实验性的。
注意: 阿伦(Arun)的回答使我了解了这些信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句