关于setkey的R data.table 1.9.2问题

jan*_*cki 6 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"))
Run Code Online (Sandbox Code Playgroud)

第二个,目前产生错误:

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?
Run Code Online (Sandbox Code Playgroud)

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

在Windows 64bit上的R 3.0.2 + data.table 1.9.2谢谢

Aru*_*run 5

现在,此问题已在v1.9.3(当前开发版本)的提交#1216中修复。来自新闻

setkey不允许将列表列作为键。但是,存在一个错误,setkey不允许data.table 仅在包含列表列的位置设置键。现在,此问题已解决。关闭#5366。感谢James Sams的报告,并感谢Michael Nelson用最小的可复制示例来指出问题。也感谢MusX 报告SO

我们应该尽快将1.9.4(下一个稳定版本)推向CRAN。