Как вернуть gridExtra как простой объект графика из функции

У меня есть следующий код, предназначенный для создания графика tableGrob на основе gridExtra и возврата его как объекта в функции.

library(gridExtra)

myfunc <- function () {
  d <- head(iris, 3)
  g <- tableGrob(d)
  grid.draw(g)
}

Но почему, когда я назвал это так

out_plot <- myfunc()
png(file='my_out_file.png', width=800, height=800)
out_plot
dev.off()

out_plot внутри ничего нет, а my_out_file.png не создано. Как правильно это сделать?


person scamander    schedule 23.10.2017    source источник


Ответы (2)


Вы должны вызвать grid.draw внутри устройства, чтобы создать файл. Обратите внимание, как out_plot <- myfunc() уже создает график на активном (в моем случае RStudio) устройстве. Ваша функция возвращает NULL, потому что это то, что возвращает grid.draw, проверьте str(out_plot).

Таким образом, просто вызовите свою функцию внутри устройства png:

library(gridExtra)
library(grid)

myfunc <- function () {
  d <- head(iris, 3)
  g <- tableGrob(d)
  grid.draw(g)
}

png(file='my_out_file.png', width=800, height=800)
myfunc()
dev.off()
person Roland    schedule 23.10.2017

вы можете вернуть объект после его рисования,

myfunc <- function () {
  d <- head(iris, 3)
  g <- tableGrob(d)
  grid.draw(g)
  invisible(g)
}
person baptiste    schedule 23.10.2017