all.equal() 数据类型为 integer64
all.equal() with integer64 data type
我有两个数据框,每个数据框都有一个 integer64
类型的列。当我使用 all.equal()
比较数据帧时,我得到 TRUE
,即使值非常不同:
library(bit64)
original <- data.frame("a" = as.integer64(c(2, 3, 6)), "b" = c("second", "data", "column"))
new <- data.frame("a" = as.integer64(c(2, 30000, 6000001)), "b" = c("second", "data", "column"))
all.equal(original, new)
# TRUE
我知道 all.equal()
可以接受非精确匹配(例如四舍五入),对于严格匹配 identical()
是更安全的选择,但为什么 all.equal()
这么说这两个数据框是一样的?有没有一种方法可以将数据框与 all.equal()
的有用细节进行比较,但拒绝将这两个表视为等效?
我无法重现:
R> library(bit64)
R> original <- data.frame(a=as.integer64(c(2, 3, 6)),
+ b=c("second", "data", "column"))
R> new <- data.frame(a=as.integer64(c(2, 30000, 6000001)),
+ b=c("second", "data", "column"))
R> all.equal(original, new)
[1] "Component “a”: Mean relative difference: 669999"
R>
你 bit64
是哪个版本 运行?
我有两个数据框,每个数据框都有一个 integer64
类型的列。当我使用 all.equal()
比较数据帧时,我得到 TRUE
,即使值非常不同:
library(bit64)
original <- data.frame("a" = as.integer64(c(2, 3, 6)), "b" = c("second", "data", "column"))
new <- data.frame("a" = as.integer64(c(2, 30000, 6000001)), "b" = c("second", "data", "column"))
all.equal(original, new)
# TRUE
我知道 all.equal()
可以接受非精确匹配(例如四舍五入),对于严格匹配 identical()
是更安全的选择,但为什么 all.equal()
这么说这两个数据框是一样的?有没有一种方法可以将数据框与 all.equal()
的有用细节进行比较,但拒绝将这两个表视为等效?
我无法重现:
R> library(bit64)
R> original <- data.frame(a=as.integer64(c(2, 3, 6)),
+ b=c("second", "data", "column"))
R> new <- data.frame(a=as.integer64(c(2, 30000, 6000001)),
+ b=c("second", "data", "column"))
R> all.equal(original, new)
[1] "Component “a”: Mean relative difference: 669999"
R>
你 bit64
是哪个版本 运行?