在 dplyr 的函数中使用字符串

Using strings in functions in dplyr

当我想在 dplyr 函数中使用字符串时,使用拥抱运算符 {{ }} 没有达到预期的效果。

例如,假设我想以编程方式 group_by 我在 data.frame

的名称中找到的变量
library(tidyverse)
library(palmerpenguins)

palmerpenguins::penguins %>% 
  select(c(1, 2, 8)) %>% 
  names %>% 
  map(
    function(i)
      penguins %>%
        group_by({{ i }}) %>% 
        tally
  )

returns

[[1]]
# A tibble: 1 x 2
  `"species"`     n
  <chr>       <int>
1 species       344

[[2]]
# A tibble: 1 x 2
  `"island"`     n
  <chr>      <int>
1 island       344

但是我想group_by把变量名传给map

{{}} 运算符不适用于字符串,而是用于符号。使用字符串你可以做

palmerpenguins::penguins %>% 
  select(c(1, 2, 8)) %>% 
  names %>% 
  map(
    function(i)
      penguins %>%
      group_by(!!rlang::sym(i)) %>% 
      tally
  )

palmerpenguins::penguins %>% 
  select(c(1, 2, 8)) %>% 
  names %>% 
  map(
    function(i)
      penguins %>%
      group_by(.data[[i]]) %>% 
      tally
  )

后者是 tidyverse 作者目前首选的方法。