5

将三个(或更多)data.tables 与 rbind 合并并且两个非空 data.tables 之间有一个空的 data.table 时会发出错误:

> require(data.table)
Loading required package: data.table
data.table 1.9.2  For help type: help("data.table")

> DT <- data.table(x=c(1,2,3))
> rbind(DT, data.table(), DT)
Error in setcolorder(tt, chmatch(match.names, make.names(original.names[[x]],  (from <text>#1) : 
  Column numbers in neworder out of bounds: NA

如果最后是空的 data.table,则不会发生这种情况:

> rbind(DT, DT, data.table()) 
   x
1: 1
2: 2
3: 3
4: 1
5: 2
6: 3

但是当空的 data.table 位于开头时会发生其他一些错误:

> rbind(data.table(), DT, DT) 
Error in data.table::.rbind.data.table(...) (from <text>#1) : 
  Some colnames of argument 2 (x) are not present in colnames of item 1. If an argument has colnames they can be in a different order, but they must all be present. Alternatively, you can supply unnamed lists and they will then be joined by position. Or, set use.names=FALSE.

但是,如果我们只使用两个参数,一切都很好:

> rbind(data.table(), DT) 
   x
1: 1
2: 2
3: 3

预期的行为应该是什么?

4

2 回答 2

4

这似乎是由于data.table::.rbind.data.table. 添加以下行将解决此问题。请向开发人员提交错误报告data.table

....
original.names = lapply(list(...), names)
allargs = lapply(list(...), as.data.table)
original.names = original.names[sapply(allargs, length) > 0L]  # this is the new line
allargs = allargs[sapply(allargs, length) > 0L]
...
于 2014-04-22T10:06:31.280 回答
1

错误 #5612现在已在提交 #1266 (v1.9.3) 中修复。来自新闻

o 实施#5249关闭了错误#5612,这是 rbind 在与空 data.tables 绑定时出错的情况,如下所示:Error when using rbind to merge data.tables and one is empty。感谢 Roger 报告 SO。

现在,该行:

> rbind(data.table(), DT, DT) 

给出:

#    x
# 1: 1
# 2: 2
# 3: 3
# 4: 1
# 5: 2
# 6: 3
于 2014-05-20T19:40:07.920 回答