【发布时间】:2011-06-13 11:03:41
【问题描述】:
更新:老问题......它已在 2011 年 2 月由 data.table v1.5.3 解决。
我正在尝试使用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
更新... 为了阐明我在上面的示例中寻找的功能:我需要执行以下等效操作:
with(merge(x,y), foo*boo)
但是,根据data.table FAQ 的以下摘录,这应该有效:
最后,虽然看起来好像 x[y] 不返回 y 中的列, 您实际上可以使用来自 y 在 j 表达式中。这就是我们 意思是加入继承范围。为什么不 只是返回所有的联合 来自 x 和 y 的列,然后运行 对此的表达?归结为 代码效率和更快 编程。当你写 x[y,fooboo], data.table 自动 检查 j 表达式以查看哪个 它使用的列。它只会子集, 或组,仅这些列。记忆 仅为 j 列创建 用途。假设 foo 在 x 中,而 boo 在 y 中(连同其他 20 列 在 y)。 x[y,fooboo] 不是更快吗 程序和运行速度比 合并步骤后跟另一个子集 步骤?
我知道this question 解决了类似的问题,但似乎没有得到令人满意的解决。有谁知道我错过了什么或误解了什么?谢谢。
更新:我在数据表帮助邮件列表和包作者(Matthew Dowle)replied 上询问确实上面引用的常见问题解答是错误的,所以我使用的语法目前不起作用,即我无法参考当我做x[y,...] 时,到j(即第二个)参数中的y 列。
【问题讨论】:
-
但您前段时间问过,2011 年 2 月发布给 CRAN 的 v1.5.3 解决了这个问题。请查看它的新闻、新的 ?data.table 和更正的常见问题解答。
-
@Matthew 谢谢你,是的,我知道最新版本已经解决了这个问题,很高兴你在这里指出了这一点,以便其他人清楚。
标签: r data.table