Sucesor de ggplot2:: fortify
broom (2)
En la versión más reciente de ggplot2
returns:
Descripción
En lugar de utilizar esta función, ahora recomiendo usar el paquete de escoba , que implementa una gama mucho más amplia de métodos.
fortify
puede ser desaprobado en el futuro.
El paquete de broom
ofrece muchas alternativas (como el augment
). ¿Cuál debería usarse en qué circunstancias?
Estoy particularmente interesado en una alternativa para fortify(spdf)
donde spdf
es un SpatialPolygonsDataFrame.
Así es como me acerqué al tema.
Después de buscar "bran cran" fui redirigido a la página correspondiente del paquete en CRAN. Ofrece algunas viñetas así que revisé Introducción a la escoba . Después de no poder encontrar ninguna cadena que coincidiera con "espacial", cerré el PDF y abrí el manual de referencia . Buscando "espacial" obtuve 7 éxitos, el primero sobre el tema de sp_tidiers. El tidy
función se anuncia para convertir un objeto espacial en un data.frame. Vamos a intentarlo.
library(sp)
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
x = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
library(broom)
tidy(x)
long lat order hole piece group id
1 2 2 1 FALSE 1 s1.1 s1
2 1 4 2 FALSE 1 s1.1 s1
3 4 5 3 FALSE 1 s1.1 s1
4 4 3 4 FALSE 1 s1.1 s1
5 2 2 5 FALSE 1 s1.1 s1
6 5 2 1 FALSE 1 s2.1 s2
7 2 2 2 FALSE 1 s2.1 s2
8 4 3 3 FALSE 1 s2.1 s2
9 5 2 4 FALSE 1 s2.1 s2
10 4 5 1 FALSE 1 s3/4.1 s3/4
11 10 5 2 FALSE 1 s3/4.1 s3/4
12 5 2 3 FALSE 1 s3/4.1 s3/4
13 4 3 4 FALSE 1 s3/4.1 s3/4
14 4 5 5 FALSE 1 s3/4.1 s3/4
15 5 4 6 TRUE 2 s3/4.2 s3/4
16 5 3 7 TRUE 2 s3/4.2 s3/4
17 6 3 8 TRUE 2 s3/4.2 s3/4
18 6 4 9 TRUE 2 s3/4.2 s3/4
19 5 4 10 TRUE 2 s3/4.2 s3/4
Publicando esto para mostrar únicamente que la versión tidy
está casi duplicada de la versión fortify
Incluso dice tanto en los documentos tidy
:
Estas funciones se originaron en el paquete ggplot2 como funciones "fortificar".
broom:::tidy.SpatialPolygonsDataFrame
function (x, region = NULL, ...)
{
attr <- as.data.frame(x)
if (is.null(region)) {
coords <- ldply(x@polygons, tidy)
message("Regions defined for each Polygons")
}
else {
cp <- sp::polygons(x)
unioned <- maptools::unionSpatialPolygons(cp, attr[,
region])
coords <- tidy(unioned)
coords$order <- 1:nrow(coords)
}
coords
}
ggplot2:::fortify.SpatialPolygonsDataFrame
function (model, data, region = NULL, ...)
{
attr <- as.data.frame(model)
if (is.null(region)) {
coords <- plyr::ldply(model@polygons, fortify)
message("Regions defined for each Polygons")
}
else {
cp <- sp::polygons(model)
unioned <- maptools::unionSpatialPolygons(cp, attr[,
region])
coords <- fortify(unioned)
coords$order <- 1:nrow(coords)
}
coords
}
Digo cerca, ya que las sutiles diferencias en la implementación tidy
(vs fortify
) causan diferencias en el orden de las columnas de data.frame generadas. Por lo tanto, tienen todo el equipaje de "lentitud" que tiene la versión fortify en objetos espaciales más grandes y no hay una razón convincente para cambiar (IMO) hasta que fortify
se desaproveche.