使用带 dplyr::group_by 的 tidyeval 大括号
Using tidyeval's braces with a dplyr::group_by
我想将字符串向量传递给 purrr::map
以生成表格列表。
library(tidyverse)
library(magrittr)
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by({{i}}) %>%
tally
)
但是这个 returns 对象按字符串分组,而不是变量名。
这个有效
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by(get(i)) %>%
tally
)
但我希望有一个更简洁的解决方案。
改用!!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 创建
我想将字符串向量传递给 purrr::map
以生成表格列表。
library(tidyverse)
library(magrittr)
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by({{i}}) %>%
tally
)
但是这个 returns 对象按字符串分组,而不是变量名。
这个有效
names(mtcars) %>%
extract(8:10) %>%
map(
function(i)
mtcars %>%
group_by(get(i)) %>%
tally
)
但我希望有一个更简洁的解决方案。
改用!!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 创建