将行附加到 data.table 的工作方式与 data.frame 不同:如何以及为什么?

Appending the row to data.table works differently than in data.frame: How and why?

为什么下面的代码不起作用?

library(data.table)
team_table <- as.data.table(matrix(NA,ncol = 11))
rbind(team_table,1:11)

而与data.frame相同的版本呢?

team_table <-as.data.frame(matrix(NA,ncol = 11))
rbind(team_table,1:11)

转换为 list 它应该可以工作

rbind(team_table,as.list(1:11))
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
#1: NA NA NA NA NA NA NA NA NA  NA  NA
#2:  1  2  3  4  5  6  7  8  9  10  11

这也是与data.frame

相同的行为
rbind(team_table,as.list(1:11))
#  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
#1 NA NA NA NA NA NA NA NA NA  NA  NA
#2  1  2  3  4  5  6  7  8  9  10  11

关于失败的原因,data.table 中的 rbind 正在调用 rbindlist 并将向量 (1:11) 视为单个列。

rbind(team_table,1:11)

Error in rbindlist(l, use.names, fill, idcol) : Item 2 has 1 columns, inconsistent with item 1 which has 11 columns. To fill missing columns use fill=TRUE.

如果我们将其转换为具有 11 个元素的 listdata.framedata.table 是具有列表元素的 list,即具有相同长度的列),它会起作用,因为它会认为列数相同

由于 1:11 被视为一列,我们可以将值转置为 rbind 它作为一行

library(data.table)
team_table <- as.data.table(matrix(NA,ncol = 11))
rbind(team_table,t(1:11))

#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
#1: NA NA NA NA NA NA NA NA NA  NA  NA
#2:  1  2  3  4  5  6  7  8  9  10  11