如何将裸元素列表传递给tidyeval绘图函数,该函数接受裸元素到purrr map

问题描述 投票:2回答:1

鉴于以下类型的功能:

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)
...

但是为了保持代码DRY,我想使用purrr::mappurrr::walk,但以下不起作用:

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

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

r purrr tidyeval
1个回答
2
投票

我们可以用quote包装以避免早期评估

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

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

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

-last情节

enter image description here


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

quos(hp, am) %>%
            walk(~ print(make_plot(!! .x)))
© www.soinside.com 2019 - 2024. All rights reserved.