将行附加到 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 个元素的 list
(data.frame
或 data.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
为什么下面的代码不起作用?
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 个元素的 list
(data.frame
或 data.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