Реплицируйте базу::данные.поведение фрейма с помощью dplyr::tibble

#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 изменил ответ, чтобы удалить вектор имени.