给定以下类型的函数:
library(tidyverse)
make_plot <- function(var) {
quo_var <- enquo(var)
ggplot(mtcars, aes(x = !!quo_var, y = mpg)) +
geom_point()
}
我想在 data.frame 的各个列上调用它,如下所示:
make_plot(hp)
make_plot(am)
...
但是为了保持代码干燥,我想使用 purrr::map
或 purrr::walk
,但以下不起作用:
list(hp, am) %>%
map(make_plot)
我也尝试过 list("hp", "am") %>% map(make_plot(sym(.))
,但也不起作用。这里使用的正确方法是什么字符串或变量列表?
最佳答案
我们可以用quote
括起来以避免早期评估
library(tidyverse)
library(ggplot2)
list(quote(hp), quote(am)) %>%
map(make_plot)
或者另一种选择是将其作为 quosure
(quos
) 列表传递
quos(hp, am) %>%
map(make_plot)
-最后一个情节
要使 ~ .x
工作,请使用 !!
进行评估
quos(hp, am) %>%
walk(~ print(make_plot(!! .x)))
关于r - 如何将裸元素列表传递给 tidyeval 绘图函数,该函数接受裸元素到 purrr map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499613/