【发布时间】:2022-01-15 21:32:58
【问题描述】:
我已经读过data.table documentation 好几遍了,但我仍然无法理解如何进行一些操作;更一般地说,我仍然不了解如何使用变量名的潜在“哲学”。考虑这个示例问题:
我有一个包含变量“a”、“b”、“c”、“d”的数据表:
> dt <- data.table(a=c(1,1,2), b=1:3, c=11:13, d=21:23)
> dt
a b c d
1: 1 1 11 21
2: 1 2 12 22
3: 2 3 13 23
假设我的脚本以交互方式要求用户输入用于选择行的列名和相应的值。这两个变量分别存放在rowselectname和rowselectvalue中:
> rowselectname
[1] "a"
> rowselectvalue
[1] 1
该脚本还以交互方式要求用户选择一些感兴趣的行名;他们的名字存储在colselectnames:
> colselectnames
[1] "b" "d"
现在我想从dt 创建一个新的数据表,其中rowselectname 具有rowselectvalue 值的行和colselectnames 给出的列。我最终设法做到这一点的唯一方法如下:
> newdt <- dt[get(rowselectname)==rowselectvalue, ..colselectnames]
> newdt
b d
1: 1 21
2: 2 22
我不明白为什么我必须使用get() 作为第一个选择,而.. 作为第二个选择。为什么两者都不是get()(它不起作用)?或者为什么两者都不是..(也不起作用)?这对我来说似乎不一致,但也许有另一种方法可以使用更一致的语法来做到这一点。我认为最明显的应该是 newdt <- dt[rowselectname==rowselectvalue, colselectnames],这就是 R 的其余部分似乎是如何工作的。
非常感谢有人向我解释如何看待这个以理解语法。
【问题讨论】:
标签: r variables data.table interactive