gpt4 book ai didi

r - 为什么两个ggplot对象通过all.equal()测试,但未通过same()测试?

转载 作者:行者123 更新时间:2023-12-03 11:41:38 27 4
gpt4 key购买 nike

我想测试ggplot生成的两个图是否相同。一种选择是在绘图对象上使用all.equal,但我宁愿进行更艰巨的测试以确保它们相同,这似乎是identical()为我提供的东西。

但是,当我测试使用相同data和相同aes创建的两个绘图对象时,我发现all.equal()将它们识别为相同,而对象未通过identical测试。我不确定为什么,也想了解更多。

基本示例:

graph <- ggplot2::ggplot(data = iris, aes(x = Species, y = Sepal.Length))
graph2 <- ggplot2::ggplot(data = iris, aes(x = Species, y = Sepal.Length))

all.equal(graph, graph2)
# [1] TRUE

identical(graph, graph2)
# [1] FALSE

最佳答案

graphgraph2对象包含环境,并且每次生成环境时,即使拥有相同的值,环境也不同。如果R列表具有相同的内容,则它们是相同的。可以这样说:环境除了其值之外还具有对象标识,而列表的值构成列表的标识。尝试:

dput(graph)
给出以下内容,其中包括在 <environment>输出中由 dput表示的环境:(输出后续)
...snip...
), class = "factor")), .Names = c("Sepal.Length", "Sepal.Width",
"Petal.Length", "Petal.Width", "Species"), row.names = c(NA,
-150L), class = "data.frame"), layers = list(), scales = <environment>,
mapping = structure(list(x = Species, y = Sepal.Length), .Names = c("x",
"y"), class = "uneval"), theme = list(), coordinates = <environment>,
facet = <environment>, plot_env = <environment>, labels = structure(list(
x = "Species", y = "Sepal.Length"), .Names = c("x", "y"
))), .Names = c("data", "layers", "scales", "mapping", "theme",
"coordinates", "facet", "plot_env", "labels"), class = c("gg",
"ggplot"))
例如,考虑:
g <- new.env()
g$a <- 1

g2 <- new.env()
g2$a <- 1

identical(as.list(g), as.list(g2))
## [1] TRUE

all.equal(g, g2) # the values are the same
## [1] TRUE

identical(g, g2) # but they are not identical
## [1] FALSE

关于r - 为什么两个ggplot对象通过all.equal()测试,但未通过same()测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48053137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com