这个问题在这里已经有了答案:
Keyed lookup on data.table without 'with'
(4 个回答)
Subsetting data.table using variables with same name as column
(2 个回答)
2年前关闭。
这一定是非常基本的事情,但我不知道如何使用与 data.table 列同名的真实变量。我可以使用不同的变量名来避免冲突,但我想知道是否有办法在放弃 DT 之前评估变量。
> DT = data.table(ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c=13:18)
> DT
ID a b c
1: b 1 7 13
2: b 2 8 14
3: b 3 9 15
4: a 4 10 16
5: a 5 11 17
6: c 6 12 18
> DT[b == 7]
ID a b c
1: b 1 7 13
> b <- 7
> DT[b == b]
ID a b c
1: b 1 7 13
2: b 2 8 14
3: b 3 9 15
4: a 4 10 16
5: a 5 11 17
6: c 6 12 18
最佳答案
由于您有两个名为 b
的变量, 一内DT
和一个在 DT
范围之外的,我们得去拿b <- 7
来自全局环境。我们可以用 get()
做到这一点.
DT[b == get("b", globalenv())]
# ID a b c
# 1: b 1 7 13
更新:您在评论中提到变量位于函数环境中。在这种情况下,您可以使用
parent.frame()
而不是 globalenv()
.f <- function(b, dt) dt[b == get("b", parent.frame(3))]
f(7, DT)
# ID a b c
# 1: b 1 7 13
f(12, DT)
# ID a b c
# 1: c 6 12 18
关于r - data.table 中的变量用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077955/