考虑一下这个简单的例子
library(dplyr)
dataframe <- data_frame(id = c(1,2,3,4),
group = c('a','b','c','c'),
value = c(200,400,120,300))
> dataframe
# A tibble: 4 x 3
id group value
<dbl> <chr> <dbl>
1 1 a 200
2 2 b 400
3 3 c 120
4 4 c 300以及这个tidyeval函数,它使用dplyr根据某些输入列聚合我的数据。
func_tidy <- function(data, mygroup){
quo_var <- enquo(mygroup)
df_agg <- data %>%
group_by(!!quo_var) %>%
summarize(mean = mean(value, na.rm = TRUE),
count = n()) %>%
ungroup()
df_agg
}现在,这起作用了
> func_tidy(dataframe, group)
# A tibble: 3 x 3
group mean count
<chr> <dbl> <int>
1 a 200 1
2 b 400 1
3 c 210 2但是在循环中执行相同的操作会导致失败。
for(col in c(group)){
func_tidy(dataframe, col)
}
Error in grouped_df_impl(data, unname(vars), drop) : Column `col` is unknown 这里有什么问题?如何在循环中使用我的tidyeval函数?
谢谢!
发布于 2017-08-25 17:40:55
在遍历列名时,需要使用字符串。
for(col in "group")
将此变量传递给函数时,需要使用rlang::sym将其从字符串转换为符号。您可以使用!!取消引用,以便计算表达式。
因此,您的循环应该是这样的(我添加了一个print来查看输出):
for(col in "group"){
print( func_tidy(dataframe, !! rlang::sym(col) ) )
}
# A tibble: 3 x 3
group mean count
<chr> <dbl> <int>
1 a 200 1
2 b 400 1
3 c 210 2https://stackoverflow.com/questions/45885829
复制相似问题