我试图弄清楚是否可以使用提供给list
的参数purrr::pmap()
并使用{{从此函数命名输出列表的元素” 1}}。
例如,这是一个简单的示例,其中我使用purrr::set_names()
为跨分组变量的不同数据框中的某些变量创建摘要。
pmap
由reprex package(v0.2.1)于2018-10-31创建
从这里可以看出,# 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>
的{{1}}参数的内容和data
中的purrr::pmap
参数的内容完全相同(nm
)。我想避免这种重复(这里purrr::set_names
元素似乎没有必要,但是我有更多的参数列表)。我无法将此列表分配给单独的对象,因为在一种情况下,它是(data_1, data_2, data_3)
,而另一个是作为3
输入的。
我该怎么做?
答案 0 :(得分:1)
从tidyverse
包中,您还可以使用lst
函数。 lst
用于创建列表。就像tibble
函数一样,创建小标题但用于创建列表。与基础list()
的区别之一是它会自动命名列表。
它在dplyr中,从tibble导出。
在示例中,我还将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:
由reprex package(v0.2.1)于2018-11-02创建