关于setkey的R data.table 1.9.2问题

时间:2014-03-05 01:38:02

标签: r data.table

这似乎是1.8.10之后引入的与setkey相关的bug,其中DT包含列表。 运行以下两个代码来查看问题:

library(data.table)
dtl <- list()
dtl[[1]] <- data.table(scenario = 1,
                       processing = c(function(x) x))
dtl[[2]] <- data.table(scenario = 2,
                       processing = c(function(x) x))
dt <- rbindlist(dtl)
setkeyv(dt, c("scenario"))

和第二个,目前产生错误:

dtl <- list()
dtl[[1]] <- data.table(scenario = 2, # <- note we change order
                       processing = c(function(x) x))
dtl[[2]] <- data.table(scenario = 1,
                       processing = c(function(x) x))
dt <- rbindlist(dtl)
setkeyv(dt, c("scenario")) #setkey cannot sort?

它在1.8.10中运作良好。我无法在我的DT上设置密钥,似乎与包含功能列表的DT有关。任何简单的解决方法?我跟踪错误消息到C代码,但不知道如何解决它。

在Windows 64bit上,

R 3.0.2 + data.table 1.9.2 感谢

1 个答案:

答案 0 :(得分:4)

现在修复了v1.9.3(当前开发版本)的commit#1216。来自NEWS

  

setkey不允许列表列作为键。但是,setkey中的错误不允许在仅包含列表列的data.table 上设置密钥。这已经修复了。关闭#5366。感谢詹姆斯·萨姆斯(James Sams)的报道以及迈克尔·尼尔森(Michael Nelson)用最小的可重复的例子来指出这个问题。还要感谢MusX for reporting on SO

我们应该很快推出1.9.4(下一个稳定版)到CRAN。