我正在使用
data.table
包。
library(data.table)
df = data.table(col1 = c(2,4,6),
col2 = c(4,6,8),
col3 = c(8,10,12),
col4 = c(20,16,14))
i = 2
df[,3]
df[,i+1]
df[,i]
df[,..i]
df[,..(i+1)]
df[,3]
给出第三列:
col3
1: 8
2: 10
3: 12
但是
df[,i+1]
只给出一个数字3
。这是我不明白的地方。它适用于本机 data.frame。为什么它不能像 data.frame 那样工作?
此外,
df[,i]
引发了错误,这建议我使用df[,..i]
,它给出了第二列。
然而,df[,..(i+1)]
引发了错误:Error in ..(i + 1) : could not find function ".."
。
有人介意帮助我理解其中的差异吗?
说出这些尝试之间的差异。这里的机制是什么?
您可以阅读
data.table
的帮助文档,并在输入with =
时查看如何使用
?..
> df[, i + 1, with = FALSE]
col3
<num>
1: 8
2: 10
3: 12
> df[, i + 1]
[1] 3
默认情况下,with=TRUE,j 在 x 的框架内求值;柱子 名称可以用作变量。如果变量名称重叠 在数据集和父范围内,您可以使用双点前缀 ..cols 显式引用 'cols 变量父范围而不是来自 你的数据集。
当 j 是列名的字符向量时,数值向量为 要选择的列位置或格式为 startcol:endcol,以及 返回的值始终是一个data.table。 with=FALSE 不是必需的 不再动态选择列。请注意 x[, cols] 是 相当于 x[, ..cols] 和 x[, cols, with=FALSE] 和 x[, .SD, .SDcols=列].