我想将字符串向量传递给purrr::map
以生成表列表。
library(tidyverse)
library(magrittr)
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by({{i}}) %>%
tally
)
但这会返回按字符串而不是变量名分组的对象。
这有效
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by(get(i)) %>%
tally
)
但是我希望能找到一种更惯用的方法。
答案 0 :(得分:2)
改为使用!!sym(i)
。我不完全理解为什么这样做,但是我想您需要首先从字符串中创建一个符号,然后必须将其准引用,以便能够用函数中的占位符替换它。如果这有道理。
library(tidyverse)
names(mtcars)[8:10] %>%
map(
function(i)
mtcars %>%
group_by(!!sym(i)) %>%
tally
)
#> [[1]]
#> # A tibble: 2 x 2
#> vs n
#> <dbl> <int>
#> 1 0 18
#> 2 1 14
#>
#> [[2]]
#> # A tibble: 2 x 2
#> am n
#> <dbl> <int>
#> 1 0 19
#> 2 1 13
#>
#> [[3]]
#> # A tibble: 3 x 2
#> gear n
#> <dbl> <int>
#> 1 3 15
#> 2 4 12
#> 3 5 5
由reprex package(v0.2.1)于2019-11-25创建