假设我们从以下开始:
library(dplyr)
library(magrittr)
library(tibble)
set.seed(123)
tbl <- data_frame(value=rnorm(100), class=rep(LETTERS[1:5], each=20))
我想写一个函数summarize_means(data, values, groupby)
,给定tbl
,"value"
和"class"
,返回与以下代码相同的输出:< / p>
tbl %>%
group_by(class) %>%
summarise(mean(value))
我的第一次尝试是:
summarise_means <- function(data, values, groupby) {
data %>%
group_by(groupby) %>%
summarise(mean(values))
}
当然,
失败了Error: unknown variable to group by : groupby
经过一些挖掘,我确定我应该使用group_by_
和summarize_
函数,但我怀疑我在这里使用不正确,因为这仍然无法正常工作:
summarise_means <- function(data, values, groupby) {
data %>%
group_by_(groupby) %>%
summarise_(mean(values))
}
当我致电summarise_means(tbl, 'value', 'class')
时,我得到:
# A tibble: 5 x 2
class NA_real_
<chr> <dbl>
1 A NA
2 B NA
3 C NA
4 D NA
5 E NA
Warning message:
In mean.default(values) : argument is not numeric or logical: returning NA
我真的不明白这里出了什么问题。非常感谢任何帮助!
答案 0 :(得分:0)
您需要将该函数与参数一起传递:
summarise_means <- function(data, values, groupby) {
data %>%
group_by_(groupby) %>%
summarise_(Mean = values)
}
summarise_means(tbl, 'mean(value)', 'class')
# A tibble: 5 x 2
class Mean
<chr> <dbl>
1 A 0.14162380
2 B -0.05125716
3 C 0.10648523
4 D -0.11991706
5 E 0.37509474