В предыдущей версии tidyr
мне удалось добавить строки во вложенный тиббл, используя tibble::add_row
. После обновления до версии 1.0.0 я получаю следующую ошибку:
Ошибка: levels.vctrs_list_of()
не поддерживается.
library(dplyr, warn.conflicts = FALSE)
library(tibble)
library(tidyr) # version 1.0.0
mtcars %>%
tidyr::nest(data = dplyr::select(., -cyl) %>% colnames) %>%
tibble::add_row(cyl = "all cyl", data = NA)
#> Error: `levels.vctrs_list_of()` not supported.
Создано в 2020-01 -17 с помощью пакета Представить (v0.3.0)
И вот тот же вызов с использованием tidyr 0.8.3
library(dplyr, warn.conflicts = FALSE)
library(tibble)
library(tidyr) # version 0.8.3
mtcars %>%
tidyr::nest(-cyl) %>%
tibble::add_row(cyl = "all cyl", data = NA)
#> # A tibble: 4 x 2
#> cyl data
#> <chr> <list>
#> 1 6 <tibble [7 × 10]>
#> 2 4 <tibble [11 × 10]>
#> 3 8 <tibble [14 × 10]>
#> 4 all cyl <lgl [1]>
Создано в 2020-01-17 с помощью пакета Представить (v0.3.0)
Другие пользователи испытывают то же самое или это указано c для моей системной среды? Нужно ли обновлять другие пакеты для запуска? Есть ли обходной путь? Стоит ли открывать вопрос на Github?
Обновление: В комментариях кто-то предлагал обновить пакет vctrs
. Но после обновления до последней версии 0.2.1 такая же ошибка все еще появляется.
background / context
Я должен уточнить, почему я хотел использовать add_row
с data = NA
на первом месте.
Мой оригинальный скрипт выглядел примерно так:
# tidyr version 0.8.3 add_row was working
iris %>%
tidyr::nest(-Species) %>%
tibble::add_row(Species = "All species", data = NA) %>%
mutate(data = purrr::modify_at(4, ~ as_tibble(select(iris, -Species)))
, который возвращал вложенный тиббл со всеми категориями, а также с общей категорией.
Под tidyr 1.0.0 my код выглядит следующим образом и выдает указанную ошибку:
# tidyr version 1.0.0 where add_row does not work
iris %>%
tidyr::nest(data = dplyr::select(., -Species) %>% colnames) %>%
tibble::add_row(Species = "All species", data = NA) %>%
mutate(data = purrr::modify_at(data, nrow(.), ~ as_tibble(select(iris, -Species))))
Поскольку add_row
больше не работает под tidyr 1.0.0, следующая лучшая аналогичная альтернатива, как @IceCreamToucan, предложила bind_rows
.
# tidyr version 1.0.0 alternative with dpylr::bind_rows
iris %>%
tidyr::nest(data = dplyr::select(., -Species) %>% colnames) %>%
dplyr::bind_rows(tibble(Species = "All species", data = NA)) %>%
mutate(data = purrr::modify_at(data, nrow(.), ~ as_tibble(select(iris, -Species))))
Однако, поскольку синтаксис tidyr::nest
стал более многословным в версии 1.0.0, я попытался упростить код, и это, пожалуй, самый простой подход, который я должен был выбрать, начиная с:
# What I should have been doing in the first place
iris %>%
dplyr::bind_rows(mutate(iris, Species = "All species")) %>%
tidyr::nest(data = dplyr::select(., -Species) %>% colnames)