4
我剛剛發現了這個bug,卻發現有人叫它"feature"。這使rbindlist
不像do.call("rbind",l)
將尊重列名稱。此外,在文檔中沒有提到這種完全意外的行爲。這真的是故意的嗎?爲什麼rbindlist不尊重列名?
代碼例如:
> library(data.table)
> DT1 <- data.table(a=1, b=2)
> DT2 <- data.table(b=3, a=4)
> DT1
a b
1: 1 2
> DT2
b a
1: 3 4
我期望rbind
「荷蘭國際集團這些會產生具有= 1,4的列; b = 2,3。並得到rbind.data.table
和rbind.data.frame
,雖然rbind.data.table
產生警告。
> rbind(DT1, DT2)
a b
1: 1 2
2: 4 3
Warning message:
In data.table::.rbind.data.table(...) :
Argument 2 has names in a different order. Columns will be bound by name for consistency with base. You can drop names (by using an unnamed list) and the columns will then be joined by position, or set use.names=FALSE. Alternatively, explicitly setting use.names to TRUE will remove this warning.
> rbind(as.data.frame(DT1), as.data.frame(DT2))
a b
1 1 2
2 4 3
> do.call('rbind', list(DT1, DT2))
a b
1: 1 2
2: 4 3
Warning message:
In data.table::.rbind.data.table(...) :
Argument 2 has names in a different order. Columns will be bound by name for consistency with base. You can drop names (by using an unnamed list) and the columns will then be joined by position, or set use.names=FALSE. Alternatively, explicitly setting use.names to TRUE will remove this warning.
rbindlist
,但是,很高興地默默破壞數據:
> rbindlist(list(DT1, DT2))
a b
1: 1 2
2: 3 4
看一看這個[出色答卷(http://stackoverflow.com/a/15673654/1627235)。 –
'rbindlist'針對速度進行了優化。匹配列名稱會適得其反,我希望默認行爲不會改變。但是,可以免費提交功能請求。 – Roland
斯文,我鏈接到我的文章。這對我來說似乎並不特別權威。羅蘭,如果你正在破壞數據,速度毫無用處。默默地在那。此外,如果名稱不被尊重,那麼使用具有命名列的數據結構有什麼意義? – James