gpt4 book ai didi

r - 为什么 data.table non-equi 连接中的 .SD 偶尔会抛出错误?

转载 作者:行者123 更新时间:2023-12-03 17:29:57 24 4
gpt4 key购买 nike

我在使用 .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]

Error in [.data.table(d1, d2, on = .(a <= s, b >= s), j = .SD) :
column(s) not found: 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上有相关讨论,例如 Both columns for rolling and non-equi joins #3093 , .SD in expression with j? #3115但我还没有找到(也许被忽略了?)对那里观察到的行为的解释。

最佳答案

感谢 Arun 和 Matt,issuefixed (note item 24)最新开发版data.table 1.12.3.

所以,

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


正如预期的那样。

关于r - 为什么 data.table non-equi 连接中的 .SD 偶尔会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489914/

24 4 0