我注意到在非等值连接中使用.SD
时不一致。对此有解释吗?
根据连接的"方向"或"类型",使用 j = .SD
会引发错误。
library(data.table)
d1 <- fread("a, b
1, 11
6, 16")
d2 <- data.table(r = 1:5, s = seq(0, 20, 5))
d1
a b 1: 1 11 2: 6 16
d2
r s 1: 1 0 2: 2 5 3: 3 10 4: 4 15 5: 5 20
d1[d2, on = .(a <= s, b >= s)]
a b r 1: 0 0 1 2: 5 5 2 3: 10 10 3 4: 10 10 3 5: 15 15 4 6: 20 20 5
d1[d2, on = .(a <= s, b >= s), j = .SD]
[.data.table
错误 (d1, d2, on = .(a <= s, b>= s(, j = .标清( :
未找到列:a
d2[d1, on = .(s >= a, s <= b)]
r s s.1 1: 2 1 11 2: 3 1 11 3: 3 6 16 4: 4 6 16
d2[d1, on = .(s >= a, s <= b), j = .SD]
r s 1: 2 1 2: 3 1 3: 3 6 4: 4 6
我已经在 R 版本 3.6.0 和 data.table
版本 1.11.8、1.12.2 和 1.12.3(github 上的开发版本(中重现了该行为。
我知道在 github 上有相关的讨论,例如,滚动和非 equi 连接 #3093 的列,.SD在表达与j?#3115 但我还没有找到(也许被忽略了?(对那里观察到的行为的解释。
感谢 Arun 和 Matt,该问题已在 data.table
1.12.3 的最新开发版本中得到解决(注意第 24 项(。
所以
d1[d2, on = .(a <= s, b >= s), j = .SD]
不再抛出错误,但返回
a b 1: 0 0 2: 5 5 3: 10 10 4: 10 10 5: 15 15 6: 20 20
不出所料。