Итерации с пользовательскими функциями построения графиков с использованием семейства `map` - PullRequest
1 голос
/ 09 октября 2019

Я создал пользовательскую функцию, которая может отображать гистограммы с помощью пакета ggplot2. Я хочу перебрать каждый столбец фрейма данных, чтобы получить гистограмму для каждого.

library(tidyverse)

#Making function to facilitate variable iteration. Supply data frame and single variable name
histogram_fun = function(df = model_data, x = "variable_name") {
     ggplot(df, aes(x = .data[[x]] )) +
         geom_histogram() + 
         labs(x = x)
}

Когда я пытаюсь histogram_fun(gss_cat, "age"), я получаю ожидаемую гистограмму. Однако, если бы я хотел перебрать переменные year, age и tvhours, я бы попробовал что-то вроде этого, но безрезультатно:

gss_numeric <- gss_cat %>% select_if(is.numeric) %>% names
gss_numeric
#> [1] "year"    "age"     "tvhours"

gss_cat %>% select(gss_numeric) %>% map(histogram_fun(df = ., x = gss_numeric))
#> Can't convert a `gg/ggplot` object to function

Как бы я перебрал моюправильный выбор с использованием функций map или walk?

Создан в 2019-10-08 пакетом Представить (v0.3.0)

1 Ответ

1 голос
/ 09 октября 2019

Вот один из вариантов, где мы конвертируем строку в sym бол и оцениваем (!!)

library(dplyr)
library(purrr)
library(ggplot2)
histogram_fun <- function(data, x ) {
  ggplot(data, aes(!! rlang::sym(x) )) +
     geom_histogram() + 
     labs(x = x)
}

gss_numeric <- c("mpg", "disp")
p1 <- map(gss_numeric, ~ histogram_fun(mtcars, .x))
library(ggpubr)
p1 <- map(gss_numeric, ~ histogram_fun(mtcars, .x))
ggarrange(p1[[1]], p1[[2]], ncol = 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...