【发布时间】:2017-11-19 11:42:27
【问题描述】:
我想了解如何将表示表达式的字符串传递给 dplyr,以便将字符串中提到的变量作为数据帧中列上的表达式进行评估。该主题的main vignette 涵盖了quosures 的传递,根本不讨论字符串。
很明显,在表示表达式时,quosures 比字符串更安全、更清晰,所以当可以使用quosures 代替时,我们当然应该避免使用字符串。但是,在使用 R 生态系统之外的工具(例如 javascript 或 YAML 配置文件)时,通常必须使用字符串而不是 quosures。
例如,假设我想要一个使用用户/调用者传入的表达式进行分组计数的函数。正如预期的那样,以下代码不起作用,因为 dplyr 使用非标准评估来解释 group_by 的参数。
library(tidyverse)
group_by_and_tally <- function(data, groups) {
data %>%
group_by(groups) %>%
tally()
}
my_groups <- c('2 * cyl', 'am')
mtcars %>%
group_by_and_tally(my_groups)
#> Error in grouped_df_impl(data, unname(vars), drop): Column `groups` is unknown
在 dplyr 0.5 中,我们将使用标准评估,例如 group_by_(.dots = groups),来处理这种情况。既然不推荐使用下划线动词,那么在 dplyr 0.7 中我们应该如何做这种事情呢?
在只是列名的表达式的特殊情况下,我们可以使用this question 的解决方案,但它们不适用于像2 * cyl 这样不只是列名的更复杂的表达式。
【问题讨论】: