Преемник ggplot2::fortify

В самой последней версии ggplot2 функция ?fortify возвращает:

Описание

Вместо использования этой функции я рекомендую использовать пакет broom, который реализует гораздо более широкий набор методов. fortify может стать устаревшим в будущем.

Пакет broom действительно предлагает множество альтернатив (например, augment). Какой из них следует использовать в каких обстоятельствах?

Меня особенно интересует альтернатива fortify(spdf), где spdf — это SpatialPolygonsDataFrame.


person Hugh    schedule 31.12.2015    source источник


Ответы (2)


Вот как я подошел к этой теме.

После поиска «broom cran» меня перенаправили на соответствующую страницу пакета на CRAN. Он предлагает несколько виньеток, поэтому я проверил Введение в метлу. Не найдя ни одной строки, соответствующей слову «пространственный», я закрыл PDF-файл и открыл справочное руководство. В поисках «пространственного» я ​​получил 7 совпадений, первое из которых относится к теме sp_tidiers. Объявляется функция tidy для преобразования пространственного объекта в data.frame. Давай попробуем.

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
person Roman Luštrik    schedule 31.12.2015

Публикация этого только для того, чтобы показать, что версия tidy почти дублирует версию fortify. Об этом даже говорится в документах tidy:

Эти функции появились в пакете ggplot2 как «укрепляющие» функции.

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
}

Я говорю почти, поскольку тонкие различия в реализации tidy (по сравнению с fortify) вызывают различия в порядке сгенерированных столбцов data.frame. Таким образом, у них есть весь багаж «медленности», который версия fortify делает с более крупными пространственными объектами, и нет веских причин для переключения (IMO), пока fortify не станет устаревшим.

person hrbrmstr    schedule 31.12.2015
comment
есть ли простой/прямой способ улучшить реализацию? (спрашиваю, потому что broom, в отличие от fortify, находится в активной разработке...) - person Ben Bolker; 31.12.2015
comment
Что касается цитаты, стоит отметить, что в руководстве broom говорится то же самое о augment, что и привело к этому вопросу. - person Hugh; 02.01.2016