这里有一个例子可以更加清晰地说明我的意思:
require(data.table)
x = data.table(a=1:10, idx=sample(c(TRUE, FALSE), 10, replace=TRUE))
x[idx]
Error in eval(expr, envir, enclos) : object 'idx' not found
然而,以下方法可以解决该问题:
x[idx[]]
#a idx
#1: 2 TRUE
#2: 5 TRUE
#3: 7 TRUE
#4: 9 TRUE
#5: 10 TRUE
这里发生了什么事情,你有什么想法吗?
x[idx == TRUE]
也可以工作。x[(idx)]
也可以。 - David Robinsonx[(idx)]
中,(idx)
被视为表达式(在 data.table 环境中),因此获取了idx
的值。而x[idx]
则在它自己的(和父级)环境中寻找idx
变量并返回空值。我觉得有点棘手。 - Arunidx
的x[idx]
表达式之外的任何表达式都将在data.table
的范围内评估idx
。 - Ricardo Saporta