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

Djp*_*ngo 6 r dataframe rbind data.table

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

library(data.table)
team_table <- as.data.table(matrix(NA,ncol = 11))
rbind(team_table,1:11)
Run Code Online (Sandbox Code Playgroud)

而同版本的data.frame呢?

team_table <-as.data.frame(matrix(NA,ncol = 11))
rbind(team_table,1:11)
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

转换为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
Run Code Online (Sandbox Code Playgroud)

这也是相同的行为 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
Run Code Online (Sandbox Code Playgroud)

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

rbind(team_table,1:11)
Run Code Online (Sandbox Code Playgroud)

rbindlist(l, use.names, fill, idcol) 中的错误:第 2 项有 1 列,与第 1 项有 11 列不一致。要填充缺失的列,请使用 fill=TRUE。

如果我们将它转换为list11元(data.frame或者data.tablelist用列表元素即具有相同长度列),它的作品,因为它会考虑列数是相同的