data.table错误,导致R中的段错误

edd*_*ddi 8 r data.table

以下代码段错误R 2.15.0运行data.table 1.8.9.

library(data.table)
d = data.table(date = c(1,2,3,4,5), value = c(1,2,3,4,5))

# works as expected
d[-5][, mean(value), by = list(I(as.integer((date+1)/2)))]

# crashes R
d[-5, mean(value), by = list(I(as.integer((date+1)/2)))]
Run Code Online (Sandbox Code Playgroud)

在相关的说明中,以下两个命令具有非常不同的输出:

d[-5][, value, by = list(I(as.integer((date+1)/2)))]
#    I value
# 1: 1     1
# 2: 1     2
# 3: 2     3
# 4: 2     4

d[-5, value, by = list(I(as.integer((date+1)/2)))]
#    I         value
# 1: 1 2.121996e-314
# 2: 1 2.470328e-323
# 3: 2 3.920509e-316
# 4: 2 2.470328e-323
Run Code Online (Sandbox Code Playgroud)

更简单的命令使我R从评论中崩溃:

d[-5, value, by = date]
Run Code Online (Sandbox Code Playgroud)

正如里卡多指出的那样,这是负面索引的结合,这就by产生了问题.

Aru*_*run 4

更新:此问题已在 v1.8.11 中修复。来自新闻

修复了 i 中负索引导致的崩溃或不正确的聚合结果,#2697。感谢 Eduard Antonyan (eddi) 的报道。添加了测试。