代码之家  ›  专栏  ›  技术社区  ›  Indrajeet Patil

将基于参数的列表元素名称设置为`pmap`

  •  0
  • Indrajeet Patil  · 技术社区  · 7 年前

    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日由 reprex package

    从这里可以看出 data 论据 purrr::pmap nm 中的参数 purrr::set_names (data_1, data_2, data_3) ). 我想 避免这种重复 (这在这里似乎是不必要的 3 元素,但我有一个更大的参数列表)。我无法将此列表分配给单独的对象,因为在一种情况下,它是一个 ,而另一个输入为 alist

    我该怎么做?

    1 回复  |  直到 7 年前
        1
  •  1
  •   cderv    7 年前

    从 tidyverse 包,你也可以用 lst lst公司 用于创建列表。就像 tibble 函数创建tible,但用于创建列表。其中一个不同点是 list() 它会自动命名列表。

    例如,我还替换了base alist 通过 rlang::exprs 事实上 equivalent . 事实上,两者都可以。

    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 reprex package (第0.2.1版)