Как передать список голых элементов в функцию tidyeval plot, которая принимает голые элементы на карту мурлыканья - PullRequest
2 голосов
/ 03 апреля 2019

Учитывая следующий тип функции:

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(.)), который также не работает. Каков правильный подход к использованию списка строк или переменных?

1 Ответ

2 голосов
/ 03 апреля 2019

Мы можем обернуть с quote, чтобы избежать ранней оценки

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

Или другой вариант - передать его как список quosure (quos)

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

-последний участок

* +1012 *enter image description here

Чтобы заставить ~ .x работать, выполните оценку с !!

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