【发布时间】:2019-12-25 01:21:26
【问题描述】:
我有一个工作流程,其中我将表示列名的字符串向量提供给在这些列上使用 group_by 的函数。当我用一个列名测试它时它可以工作,但当我通过它的倍数时它会失败。
基本设置是这样的:
group_summs <- function(df, grouping_vars) {
if(length(grouping_vars == 1)) {
group_var <- ensym(grouping_vars)
df %>%
group_by(!! group_var) %>%
summarise(n_test = n())
} else {
group_vars <- grouping_vars
df %>%
group_by_at(.vars = group_vars) %>%
summarise(n_test = n())
}
}
#Single column test
flights <- nycflights13::flights
col_test <- c("origin")
#This Works
group_summs(flights, col_test)
#Multiple columns test
col_test_2 <- c("origin", "carrier")
#This fails
group_summs(flights, col_Test_2)
所以作为测试,我可以传递一个列名并让它运行,但是当我使用多个列名运行它时,我得到一个 rlang 错误。
"错误:只能将字符串转换为符号
致电rlang::last_error() 查看回溯
调用自:rlang::abort(x)"
我真正不明白的是为什么多列示例在函数之外正确运行,如下所示:
#Runs just fine
col_test_2 <- c("origin", "carrier")
flights %>% group_by_at(.vars = col_test_2) %>% summarise(n_test = n())
函数环境是否有我不理解的地方,或者这是一个错误的行为?
我正在使用 dplyr (0.8.3) 和 rlang (0.4.0)。
这个问题与Group by multiple columns in dplyr, using string vector input 非常相似,但该问题的解决方案导致相同的错误,所以我想知道现在是否有更新的解决方案(他们目前的解决方案从 2017 年开始)。
【问题讨论】: