gpt4 book ai didi

r - 如何在循环中使用 tidyeval 函数?

转载 作者:行者123 更新时间:2023-12-02 09:17:06 27 4
gpt4 key购买 nike

考虑这个简单的例子

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 函数?

谢谢!

最佳答案

要遍历列名,您需要使用字符串。

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 2

关于r - 如何在循环中使用 tidyeval 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45885829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com