这似乎是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 感谢
答案 0 :(得分:4)
setkey
不允许列表列作为键。但是,setkey
中的错误不允许在仅包含列表列的data.table
上设置密钥。这已经修复了。关闭#5366。感谢詹姆斯·萨姆斯(James Sams)的报道以及迈克尔·尼尔森(Michael Nelson)用最小的可重复的例子来指出这个问题。还要感谢MusX for reporting on SO。
我们应该很快推出1.9.4(下一个稳定版)到CRAN。