Как использовать walk для тихого вывода вывода ggplot2 с purrr - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь понять, как использовать walk для тихого (без печати на консоли) возврата ggplot2 графиков в конвейере.

library(tidyverse)

# EX1: This works, but prints [[1]], [[2]], ..., [[10]] to the console
10 %>%
  rerun(x = rnorm(5), y = rnorm(5)) %>%
  map(~ data.frame(.x)) %>%
  map(~ ggplot(., aes(x, y)) + geom_point())

# EX2: This does not plot nor print anything to the console
10 %>%
  rerun(x = rnorm(5), y = rnorm(5)) %>%
  map(~ data.frame(.x)) %>%
  walk(~ ggplot(., aes(x, y)) + geom_point())

# EX3: This errors: Error in obj_desc(x) : object 'x' not found
10 %>%
  rerun(x = rnorm(5), y = rnorm(5)) %>%
  map(~ data.frame(.x)) %>%
  pwalk(~ ggplot(.x, aes(.x$x, .x$y)) + geom_point())

# EX4: This works with base plotting
10 %>%
  rerun(x = rnorm(5), y = rnorm(5)) %>%
  map(~ data.frame(.x)) %>%
  walk(~ plot(.x$x, .x$y))

Я ожидал, что пример № 2 сработает, но я, должно быть, упускаю или не понимаю что-то. Я хочу графики от # 1 без вывода на консоль.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я не уверен, почему это работает с базой R plot в вашем 4-м примере, если честно.Но для ggplot вам нужно явно указать walk, что вы хотите, чтобы он печатался.Или, как показывают комментарии, walk вернет графики (я неправильно написал в своем первом комментарии по этому поводу), но не напечатает их.Таким образом, вы можете использовать walk для сохранения графиков, а затем написать второе утверждение для их печати.Или сделайте это за один walk вызов.

Здесь есть две вещи: я использую обозначение функции внутри walk вместо сокращенной нотации purrr ~, просто чтобы было понятнее, чтопродолжается.Я также изменил 10 на 4, просто чтобы не затоплять все экраны сотнями сюжетов.

library(tidyverse)

4 %>%
    rerun(x = rnorm(5), y = rnorm(5)) %>%
    map(~ data.frame(.x)) %>%
    walk(function(df) {
        p <- ggplot(df, aes(x = x, y = y)) + geom_point()
        print(p)
    })

Созданов 2018-05-09 пакетом Представить (v0.2.0).

0 голосов
/ 09 мая 2018

Это должно работать

10 %>%
  rerun(x = rnorm(5), y = rnorm(5)) %>%
  map(~ data.frame(.x)) %>%
  map(function(x) {
      ggplot(x, aes(x, y)) + geom_point()
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...