首页 > 解决方案 > testthat expect_identical FALSE 直到包装在 as.data.table 中

问题描述

我已经阅读了 expect_equal 和 expect_identical 之间的区别。

话虽如此,我有一个函数可以生成如下所示的数据表:

       Thing1 Thing2 Thing3
Thing1   34.6   23.4   54.2
Thing2   34.7   33.2   32.1
Thing3   32.7   33.5   33.8

 structure(list(` ` = c("Thing1", "Thing2", "Thing3"), `Thing1` = c(34.6,
 34.7, 32.7), `Thing2` = c(32.4, 33.2, 33.5), `Thing3` = c(33,
 32.1, 33.8)), .Names = c(" ", "Thing1", "Thing2", "Thing3"), row.names = c(NA,
 -3L), class = c("data.table", "data.frame"))

我们称这张桌子为output。我将此 data.table 保存在 .rds 中,然后使用 readRDS 重新加载它。这个新表称为test. 结构不变,只有指针不同。尽管如此,运行identical(test, output)会产生错误。同样,结构与指针的期望相同。所有的课都是一样的。

但是,这:identical(as.data.table(test), output)产量TRUE。有谁知道这里发生了什么?这不是一个简单的班级问题。我不知所措。

您可以通过执行以下操作自己重新创建此问题:

x <- as.data.table(mtcars)
saveRDS(x, "~/test.rds")
y <- readRDS("~/test.rds")
str(x)
str(y)
identical(x, y)

更新

我检查mem_change()了两个对象,它是不同的。然而,object.size()是一样的。

标签: rtestthat

解决方案


推荐阅读