它必须是非常基本的东西,但我无法弄清楚如何使用与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
答案 0 :(得分:3)
由于您有两个名为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