【发布时间】:2016-07-18 19:59:22
【问题描述】:
假设我们从以下开始:
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",返回与以下代码相同的输出:
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
我真的不明白这里出了什么问题。非常感谢任何帮助!
【问题讨论】:
-
还可以使用lazyval 包中的
summarise_(interp(~ mean(var), var = as.name(values)))。然后你的函数将与你当前的输入一起工作