带有公式的函数的正确dplyr函数式编程语法是什么
我正在尝试使用 dplyr 函数式编程指南编写一个函数来动态更改变量名称。它适用于大多数 tidyverse 变量替换,但不适用于要评估的函数使用公式时。
一个绘图示例facet_wrap:
library(dplyr)
library(ggplot2)
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~cyl)
f <- function(wrap_col) {
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~ {{ wrap_col }})
}
f(cyl)
# Error in eval_tidy(facet, mask) : object 'cyl' not found
我尝试了上面的简单版本并使用引号"{{ wrap_col }}"和方括号。没有一个对我有用
回答
我们可以用 rlang::inject
library(dplyr)
f <- function(wrap_col) {
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(rlang::inject(~ {{ wrap_col }}))
}
-测试
p1 <- mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~cyl)
p2 <- f(cyl)
all.equal(p1, p2)
#[1] TRUE