在 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 作者目前首选的方法。
当我想在 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 作者目前首选的方法。