我想在调用函数时使用引号(字符串)版本的列名来引用数据帧中的列名。这是因为我想通过包含列名的各种字符向量来映射函数。(由于其他原因,我不能简单地通过数据帧本身进行映射。)
如此:
library(tidyverse)
head(iris)
summariseByGroup = function(dat, grouping_var, column_name){
dat %>%
group_by({{grouping_var}}) %>%
summarise(sum = sum({{column_name}}))
}
summariseByGroup(iris, Species, Sepal.Length)
> Species sum
<fct> <dbl>
1 setosa 250.
2 versicolor 297.
3 virginica 329.
这行不通:
summariseByGroup(iris, Species, 'Sepal.Length')
Error in `summarise()`:
! Problem while computing `sum = sum("Sepal.Length")`.
ℹ The error occurred in group 1: Species = setosa.
Caused by error in `sum()`:
! invalid 'type' (character) of argument
这是因为我无法理解求值的某些方面。
是否有一个解决方案,取消字符串和计算它作为一个列名?
跟随@Zoe的指针传递一个字符串作为dplyr::filter中的变量名
summariseByGroup2 = function(dat, grouping_var, column_name){
dat %>%
group_by({{grouping_var}}) %>%
summarise(sum = sum(get(column_name)))
}
summariseByGroup2(iris, Species, 'Sepal.Length')
# A tibble: 3 × 2
Species sum
<fct> <dbl>
1 setosa 250.
2 versicolor 297.
3 virginica 329.