UPDATE:老问题...它是由data.table V1.5.3在二月得到解决2011年R:使用data.table的时候如何在我做x [y]的时候得到y的列?
我试图使用data.table
包,真的很喜欢加速比我得到的,但我感到,当我做x[y, <expr>]
其中x
和y
是“数据表”具有相同的键此错误难倒,并<expr>
同时包含x
和y
的列名:
require(data.table)
x <- data.table(foo = 1:5, a = 5:1)
y <- data.table(foo = 1:5, boo = 10:14)
setkey(x, foo)
setkey(y, foo)
> x[y, foo*boo]
Error in eval(expr, envir, enclos) : object 'boo' not found
UPDA TE ... 为了澄清我要寻找一个在上面的例子中的功能:我需要做下面的等价:
with(merge(x,y), foo*boo)
然而,根据从data.table
FAQ下面的摘录,这应该有工作:
最后,虽然它看起来好像 X [Y]不以y返回列, 实际上你可以在J表达式中使用的列从 年。这就是我们 所说的加入继承范围。为什么不 只是返回从x和y所有 列的联合,然后运行 表达式?它归结为 代码的有效性以及编程的更快速的 。当您编写 x [y,foo boo]时,data.table会自动检查j表达式以查看它使用哪个列。它只会成为子集, 或组,只有那些列。仅为j 使用的列创建内存 。假设foo在x中,并且boo 在y中(以及y中的其他20列 )。是不是x [y,foo boo]更快到 程序和更快运行比 合并步骤其次子集 步骤?
我知道this question解决了类似的问题,但似乎没有得到满意的解决。任何人都知道我错过了什么或误解?谢谢。
更新:我问了关于数据表帮助邮件列表和包作者(马修Dowle)replied确实上面引用的FAQ是错误的,所以我使用的语法目前不会工作,即我不能参考当我做x[y,...]
时,j
(即第二个)参数中的y
列。
但是你问前一段时间,它是由在2011年二月发布到CRAN V1.5.3解决请看看它的消息,新的?data.table和纠正常见问题。 – 2011-03-24 12:34:29
@Matthew谢谢你,是的,我知道它已经被最新的版本中解决了,我很高兴你指出来这里,所以很明显给他人。 – 2011-03-24 14:06:24