R fast join data.table(潜在错误,报告前检查)
这可能是个bug。在这种情况下,我将删除这个问题并报告为bug。我想有人来看看,以确保我没有做错事,这样我就不会浪费开发人员的时间R fast join data.table(潜在错误,报告前检查),r,merge,data.table,R,Merge,Data.table,这可能是个bug。在这种情况下,我将删除这个问题并报告为bug。我想有人来看看,以确保我没有做错事,这样我就不会浪费开发人员的时间 test = data.table(mo=1:100, b=100:1, key=c("mo", "b")) mo = 1 test[J(mo)] 返回整个testdata.table,而不是 test[J(1)] 我相信错误可能来自于test的列名与被mo联接的表的列名相同。其他人也有同样的问题吗?这不是一个bug,而是有记录的行为。这是一个范围界定问题: t
test = data.table(mo=1:100, b=100:1, key=c("mo", "b"))
mo = 1
test[J(mo)]
返回整个test
data.table,而不是
test[J(1)]
我相信错误可能来自于
test
的列名与被mo
联接的表的列名相同。其他人也有同样的问题吗?这不是一个bug,而是有记录的行为。这是一个范围界定问题:
test[J(globalenv()$mo)]
mo b
1: 1 100
这是一个范围问题,类似于中讨论的问题。因为
test
包含一个名为mo
的列,所以当计算J(mo)
时,它返回整个列,而不是在全局环境中找到的mo
的值,该值被屏蔽。(当然,当你想做一些类似于test[moI无法解释行为,但是fwiw:foo=1;test[J(foo)]
的事情时,这种范围界定行为是非常好的。同样的情况也适用于test[mo]
和mo=data。表(1);test[mo]
。另外,idential(test[J(1)],test[J(mo])
test <- data.table(mo=1:5, b=5:1, key=c("mo", "b"))
mo <- 1
test[browser()]
Browse[1]> J(mo)
# mo
# 1: 1
# 2: 2
# 3: 3
# 4: 4
# 5: 5
# Browse[1]>
MO <- 1
test[J(MO)]
# mo b
# 1: 1 6
mo <- data.table(1)
test[mo]
# mo b
# 1: 1 6