在data.table中自我索引时出错

时间:2013-05-12 21:10:45

标签: r data.table

这是我的意思的一个例子,它使事情变得清晰:

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

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

引用@GSee评论中提供的链接。

  
    

您好,     是的预期。来自?data.table:     “高级:当我是单个变量名称时,它不被认为是     列名的表达式,而是在调用范围中计算。“     通过逻辑列进行子集是我能想到的唯一例子     这令人困惑。但是我们非常多地使用这个功能,例如          TMP =列表(...); DT [TMP]     知道DT [TMP]将来如果DT不会开始失败的安全性     有一个名为TMP的列。     当我有一个逻辑列boolCol时,我用():DT [(boolCol)]包装     这避免了内存分配和扫描== TRUE,并避免了     DT的变量名重复[DT $ boolCol]     马修