dplyr::left_join
(以及其他函数)中的by
参数需要一个字符串列表。我的代码已经将感兴趣的变量定义为quo表达式列表,因此我想通过将quo表达式列表转换为字符串列表来避免第二次编写列表。我查找了rlang
文档,但没有找到现有的解决方案。 quo_expr
系列函数可以拼接并将quo表达式转换为单个字符串,但它们不会产生字符串列表:library(rlang)
# this works
sepal_length <- quo(Sepal.Length)
quo_text(sepal_length)
# this doesnt
sepaldims <- quos(Species, Sepal.Length)
quo_text(sepaldims)
这是一个使用此功能会很有用的例子:
library(dplyr)
# group_by accepts a list of quosures
sepaldims <- quos(Species, Sepal.Length)
iris_sepal <- iris %>%
group_by(!!!sepaldims) %>%
summarize(sepal_width = mean(Sepal.Width), petal_width = mean(Petal.Width))
petaldims <- quos(!!!sepaldims, Petal.Length)
iris_petal <- iris %>%
group_by(!!!petaldims) %>%
summarize(sepal_width = mean(Sepal.Width), petal_width = mean(Petal.Width))
# but left join expects a list of strings
iris_merge <- left_join(iris_sepal, iris_petal, by = c("Species", "Sepal.Length"))
quos_text
函数可以简化为sapply(qs, quo_text)
。 - Marius