scale_x_discrete manually guides ggtitle ggplot change r ggplot2 equality

manually - ¿Por qué dos objetos ggplot pasan una prueba all.equal() pero fallan la prueba idéntica()?



guides ggplot2 (1)

Quiero probar si dos gráficos generados por ggplot son iguales. Una opción sería usar all.equal en los objetos de la trama, pero preferiría tener una prueba más dura para asegurar que son iguales, lo que parece es algo identical() me proporciona.

Sin embargo, cuando probé dos objetos de trazado creados con los mismos data y los mismos aes , encontré que all.equal() reconoce como iguales, mientras que los objetos no pasaron la prueba identical . No estoy seguro por qué y me gustaría aprender más.

Ejemplo básico:

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


Los objetos graph y graph2 contienen entornos y cada vez que se genera un entorno, es diferente incluso si contiene los mismos valores. Las listas R son idénticas si tienen los mismos contenidos, pero a diferencia de las listas, los entornos tienen identidad de objeto. Tratar:

dput(graph)

dando lo siguiente que incluye los entornos denotados por <environment> en la salida dput : (continua después de la salida)

...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"))

Por ejemplo, considere:

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) ## [1] TRUE identical(g, g2) ## [1] FALSE