如何将裸元素列表传递给接受裸元素到purrr映射的tidyeval绘图函数

时间:2019-04-03 16:06:38

标签: r purrr tidyeval

提供以下类型的功能:

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::mappurrr::walk,但以下操作无效:

list(hp, am) %>%
  map(make_plot)

我也尝试过list("hp", "am") %>% map(make_plot(sym(.)),该方法也不起作用。在这里使用字符串或变量列表的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我们可以使用quote来避免早期评估

library(tidyverse)
library(ggplot2)
list(quote(hp), quote(am)) %>% 
      map(make_plot)

或者另一种选择是将其作为quosurequos)的列表传递

quos(hp, am) %>%
    map(make_plot)

最后一个情节

enter image description here


要使~ .x工作,请对!!进行评估

quos(hp, am) %>%
            walk(~ print(make_plot(!! .x)))