#r #dplyr #tibble
Вопрос:
Я хочу создать вектор имен из объектов, найденных в окружающей среде, и поместить этот вектор в a tibble
. Это работает , когда вы используете a base::data.frame()
, следующим образом:
library(tidyverse)
# three objects in the environment
str_c("x", 1:3) %>%
map(
~assign(., "", envir = .GlobalEnv)
)
data.frame(
v1 = ls()
)
это возвращает
v1
1 x1
2 x2
3 x3
но если я попытаюсь использовать dplyr::tibble()
, я получу
tibble(
v1 = ls()
)
# A tibble: 1 x 1
v1
<chr>
1 ~
Как я могу tibble
воспроизвести такое data.frame
поведение?
Комментарии:
1. Я не хочу быть осуждающим, но есть ли причина, по которой вы хотели бы это сделать?
2. явное извращение
Ответ №1:
Используйте enframe
из tibble
, обновлено, чтобы удалить лишний вектор имен:
library(tidyverse)
# three objects in the environment
str_c("x", 1:3) %>%
map(
~assign(., "", envir = .GlobalEnv)
)
#> [[1]]
#> [1] ""
#>
#> [[2]]
#> [1] ""
#>
#> [[3]]
#> [1] ""
enframe(ls(), value = "v1", name = NULL)
#> # A tibble: 3 x 1
#> v1
#> <chr>
#> 1 x1
#> 2 x2
#> 3 x3
Создано 2021-05-06 пакетом reprex (v2.0.0)
Комментарии:
1. близко, но обеспечивает избыточный
name
вектор2. @tomw изменил ответ, чтобы удалить вектор имени.