在相同的data.tables上执行bind_rows()和rbind()之后,same()= FALSE?

arm*_*unk 6 r rbind dplyr data.table

警告:新手.我有几个data.tables,每个数百万行,变量主要是日期和因素.我正在使用rbindlist()来组合它们,因为.昨天,在将表分成较小的块(而不是当前的水平拼接)之后,我试图更好地理解rbind(特别是使用fill = TRUE)并尝试了bind_rows()然后尝试验证结果但是相同( )返回FALSE.

library(data.table)
library(dplyr)
DT1 <- data.table(a=1, b=2)
DT2 <- data.table(a=4, b=3)
DT_bindrows <- bind_rows(DT1,DT2)
DT_rbind <- rbind(DT1,DT2)
identical(DT_bindrows,DT_rbind)
 # [1] FALSE
Run Code Online (Sandbox Code Playgroud)

目视检查bind_rows()和rbind()的结果表明它们确实相同.我读了这个这个(从我调整的例子).我的问题:(a)我错过了什么,以及(b)如果我的列的数量,名称和顺序是相同的,我是否应该关注相同的()= FALSE?

akr*_*run 5

identical支票attributes这是不一样的.有all.equal,有一个选项不检查属性(check.attributes)

all.equal(DT_bindrows, DT_rbind, check.attributes = FALSE)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如果我们检查str两个数据集,就会变得清晰

str(DT_bindrows)
#Classes ‘data.table’ and 'data.frame': 2 obs. of  2 #variables:
# $ a: num  1 4
# $ b: num  2 3
str(DT_rbind)
#Classes ‘data.table’ and 'data.frame': 2 obs. of  2 #variables:
# $ a: num  1 4
# $ b: num  2 3
# - attr(*, ".internal.selfref")=<externalptr> # reference attribute 
Run Code Online (Sandbox Code Playgroud)

通过将属性赋值为NULL,identical返回TRUE

attr(DT_rbind, ".internal.selfref") <- NULL
identical(DT_bindrows, DT_rbind)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)