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

标签 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(.)) ,但也不起作用。这里使用的正确方法是什么字符串或变量列表?

最佳答案

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

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

或者另一种选择是将其作为 quosure (quos) 列表传递

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

-最后一个情节

enter image description here


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

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

关于r - 如何将裸元素列表传递给 tidyeval 绘图函数,该函数接受裸元素到 purrr map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499613/

相关文章:

r - 可以 "save"dplyr函数供以后使用吗?

R ggplot : geom_tile lines in pdf output

r - 在 R dygraphs 中更改图例的时间戳格式

r - 具有用户定义函数和命名列表的 purrr::pmap

r - 从 tibble (R, dplyr) 中的每一行中减去 1 行

r - 将所有列名称传递给 mutate() 内的 pmap()

r - 找到至少一列不是 NA 的最后一行

r - 如何使用 dplyr 将函数逐行应用到数据框中,而不对列名称进行硬编码

r - 使用 tidyverse (dplyr) 标准化混合数字/非数字 DataFrame 中的列?

r - 跨多个变量粘贴变量名称及其向量值