Возврат графика из функции без ее построения - PullRequest
0 голосов
/ 01 декабря 2018

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

Вот MWE.

graph_functions <- function(x) {
  plot(1:length(x), x)
  points(1:length(x), x^2)
  t <- recordPlot()
  return(t)
}

answer <- graph_functions(1:10)

library(cowplot)
plot_grid(answer, answer)

В приведенном выше коде я не хочу, чтобы он строил график, когда я впервые вычисляюответьте по телефону graph_functions(1:10).Я только хочу построить график, когда использую plot_grid().

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы можете открыть нулевое устройство и отобразить его.Обратите внимание, что если вы используете cowplot с графикой base-R, вам следует перейти на версию для разработчиков с devtools::install_github("wilkelab/cowplot").Он обеспечивает значительно улучшенную обработку графики base-R.

graph_functions <- function(x) {
  cur_dev <- grDevices::dev.cur()   # store current device
  pdf(NULL, width = 6, height = 6)  # open null device
  grDevices::dev.control("enable")  # turn on recording for the null device
  null_dev <- grDevices::dev.cur()  # store null device

  # make sure we always clean up properly, even if something causes an error
  on.exit({
    grDevices::dev.off(null_dev)
    if (cur_dev > 1) grDevices::dev.set(cur_dev) # only set cur device if not null device
  })

  # plot
  plot(1:length(x), x)
  points(1:length(x), x^2)
  recordPlot()
}

answer1 <- graph_functions(1:10)
answer2 <- graph_functions(1:20)
cowplot::plot_grid(answer1, answer2)

Создано в 2018-12-04 пакетом Представить (v0.2.1)

0 голосов
/ 01 декабря 2018
graph_functions<- function(x) {
  plot(1:length(x),x)
  points(1:length(x),x^2)
  t<- recordPlot()
  return(t)
}
answer <- c(1:10)
library(cowplot)
plot_grid(graph_functions(answer),graph_functions(answer))

Вы можете поместить функцию в функцию plot_grid () и просто сохранить параметры в переменной ответа.

...