установка имен элементов списка на основе аргумента в `pmap` - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь выяснить, могу ли я использовать list аргументов, предоставленных purrr::pmap(), чтобы также именовать элементы списка вывода из этой функции, используя purrr::set_names().

Например, вот простой пример, в котором я использую pmap для создания сводки для некоторых переменных из разных фреймов данных по группируемым переменным.

# setup
library(tidyverse)
library(groupedstats)
set.seed(123)

# creating the dataframes
data_1 <- tibble::as.tibble(iris)
data_2 <- tibble::as.tibble(mtcars)
data_3 <- tibble::as.tibble(airquality)

# creating a list
purrr::pmap(
  .l = list(
    data = list(data_1, data_2, data_3),
    grouping.vars = alist(Species, c(am, cyl), Month),
    measures = alist(c(Sepal.Length, Sepal.Width), wt, c(Ozone, Solar.R, Wind))
  ),
  .f = groupedstats::grouped_summary
) %>% # assigning names to each element of the list
  purrr::set_names(x = ., nm = alist(data_1, data_2, data_3))

# output
#> $data_1
#> # A tibble: 6 x 16
#>   Species type  variable missing complete     n  mean    sd   min   p25
#>   <fct>   <chr> <chr>      <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa  nume~ Sepal.L~       0       50    50  5.01  0.35   4.3  4.8 
#> 2 setosa  nume~ Sepal.W~       0       50    50  3.43  0.38   2.3  3.2 
#> 3 versic~ nume~ Sepal.L~       0       50    50  5.94  0.52   4.9  5.6 
#> 4 versic~ nume~ Sepal.W~       0       50    50  2.77  0.31   2    2.52
#> 5 virgin~ nume~ Sepal.L~       0       50    50  6.59  0.64   4.9  6.23
#> 6 virgin~ nume~ Sepal.W~       0       50    50  2.97  0.32   2.2  2.8 
#> # ... with 6 more variables: median <dbl>, p75 <dbl>, max <dbl>,
#> #   std.error <dbl>, mean.low.conf <dbl>, mean.high.conf <dbl>
#> 
#> $data_2
#> # A tibble: 6 x 17
#>      am   cyl type  variable missing complete     n  mean    sd   min   p25
#>   <dbl> <dbl> <chr> <chr>      <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     1     6 nume~ wt             0        3     3  2.75  0.13  2.62  2.7 
#> 2     1     4 nume~ wt             0        8     8  2.04  0.41  1.51  1.78
#> 3     0     6 nume~ wt             0        4     4  3.39  0.12  3.21  3.38
#> 4     0     8 nume~ wt             0       12    12  4.1   0.77  3.44  3.56
#> 5     0     4 nume~ wt             0        3     3  2.94  0.41  2.46  2.81
#> 6     1     8 nume~ wt             0        2     2  3.37  0.28  3.17  3.27
#> # ... with 6 more variables: median <dbl>, p75 <dbl>, max <dbl>,
#> #   std.error <dbl>, mean.low.conf <dbl>, mean.high.conf <dbl>
#> 
#> $data_3
#> # A tibble: 15 x 16
#>    Month type  variable missing complete     n   mean     sd   min    p25
#>    <int> <chr> <chr>      <dbl>    <dbl> <dbl>  <dbl>  <dbl> <dbl>  <dbl>
#>  1     5 inte~ Ozone          5       26    31  23.6   22.2    1    11   
#>  2     5 inte~ Solar.R        4       27    31 181.   115.     8    72   
#>  3     5 nume~ Wind           0       31    31  11.6    3.53   5.7   8.9 
#>  4     6 inte~ Ozone         21        9    30  29.4   18.2   12    20   
#>  5     6 inte~ Solar.R        0       30    30 190.    92.9   31   127   
#>  6     6 nume~ Wind           0       30    30  10.3    3.77   1.7   8   
#>  7     7 inte~ Ozone          5       26    31  59.1   31.6    7    36.2 
#>  8     7 inte~ Solar.R        0       31    31 216.    80.6    7   175   
#>  9     7 nume~ Wind           0       31    31   8.94   3.04   4.1   6.9 
#> 10     8 inte~ Ozone          5       26    31  60.0   39.7    9    28.8 
#> 11     8 inte~ Solar.R        3       28    31 172.    76.8   24   107   
#> 12     8 nume~ Wind           0       31    31   8.79   3.23   2.3   6.6 
#> 13     9 inte~ Ozone          1       29    30  31.4   24.1    7    16   
#> 14     9 inte~ Solar.R        0       30    30 167.    79.1   14   117.  
#> 15     9 nume~ Wind           0       30    30  10.2    3.46   2.8   7.55
#> # ... with 6 more variables: median <dbl>, p75 <dbl>, max <dbl>,
#> #   std.error <dbl>, mean.low.conf <dbl>, mean.high.conf <dbl>

Создано в 2018-10-31 пакетом представ. (v0.2.1)

Как можно видеть здесь, содержимое аргумента data для purrr::pmap и nm аргумента в purrr::set_names в точности совпадают ((data_1, data_2, data_3)). Я хочу избежать этого повторения (что здесь не нужно с элементами 3, но у меня есть гораздо больший список аргументов). Я не могу присвоить этот список отдельному объекту, потому что в одном случае это list, а в другом - alist.

Как я могу это сделать?

1 Ответ

0 голосов
/ 02 ноября 2018

Из пакета tidyverse вы также можете использовать функцию lst. lst используется для создания списка. Это похоже на tibble функцию для создания тибла, но для создания списка. Одно из отличий от базы list() заключается в том, что она автоматически называет список. Это в dplyr, экспортируется из Tibble.

Например, я также заменяю базу alist на rlang::exprs, поскольку она эквивалентна . Действительно, оба в порядке.

library(tidyverse)
library(groupedstats)
set.seed(123)

# creating the dataframes
data_1 <- tibble::as.tibble(iris)
data_2 <- tibble::as.tibble(mtcars)
data_3 <- tibble::as.tibble(airquality)

# creating a list
purrr::pmap(
  .l = list(
    data = lst(data_1, data_2, data_3),
    grouping.vars = rlang::exprs(Species, c(am, cyl), Month),
    measures = rlang::exprs(c(Sepal.Length, Sepal.Width), wt, c(Ozone, Solar.R, Wind))
  ),
  .f = groupedstats::grouped_summary
) %>%
  str(1)
#> List of 3
#>  $ data_1:Classes 'tbl_df', 'tbl' and 'data.frame':  6 obs. of  16 variables:
#>  $ data_2:Classes 'tbl_df', 'tbl' and 'data.frame':  6 obs. of  17 variables:
#>  $ data_3:Classes 'tbl_df', 'tbl' and 'data.frame':  15 obs. of  16 variables:

Создано в 2018-11-02 пакетом Представление (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...