data.table join和j-expression意外行为 [英] data.table join and j-expression unexpected behavior
本文介绍了data.table join和j-expression意外行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 R 2.15.0
和 data.table 1.8.9
:
d = data.table(a = 1:5,value = 2:6,key =a)
d (3),value]
#a value
#3 4
d [J(3)] [,value]
#4
我希望两个产生相同的输出(第二个),我相信他们应该。 / p>
为了清除这不是 J
语法问题,同样的期望适用于以下到上面的)表达式:
t = data.table(a = 3,key =a)
d [t,value]
d [t] [,value]
因此,让我重新整理问题:为什么是(
data.table c> d [t,value]
? $自动打印出的 b $ b
更新(根据下面的答案和评论):感谢@Arun等人,我明白设计 - 为什么现在。上述打印键的原因是因为每当你做 data.table
时,
X [Y]
语法合并,通过
之所以这样设计的原因似乎是这样的 - 因为 by
操作必须在合并时执行,我们可以利用它,而不是另一个<$ 现在说,我相信这是一个语法设计缺陷。我读取 data.table
语法 d [i,j,by = b]
的方式是
使用
d
,应用i
(是子集合或合并或其他),然后通过b
$来执行 j
b $ b
by-without-by打破了这个阅读,介绍了我们必须特别考虑的情况(我在 i
上合并,是 by
只是合并的键,等等)。我相信这应该是 data.table
的工作 - 值得赞扬的努力,使一个更快的$ data.table
当通过
等于键时,应以另一种方式进行合并(例如通过内部检查 by
表达式实际上是合并的关键。)
解决方案