R: Создайте пользовательскую функцию, которая наносит на график данные и затем экспортирует график - PullRequest
0 голосов
/ 08 февраля 2020

Простая цель: я пытаюсь создать определяемый пользователем fn (udf), который позволит мне объединить несколько строк кода, чтобы он был сжат и легче читался.

Давайте рассмотрим простой пример. В одном fn я хотел бы построить некоторые данные и затем экспортировать график, используя tiff fn (или любой аналогичный fn: png, jpeg, ...). Однако я хочу иметь возможность использовать любую функцию построения по своему выбору , поэтому я подумал, что передача кодового блока (назовем его ' plotcode ') вызову fn будет работать просто хорошо. Что-то вроде:

udf <- function(plotcode, title){
plotcode
tiff(filename=title)
   plotcode
   dev.off()
}

Конечная цель состоит в том, чтобы превратить 4 строки кода в 1, то есть:

plot(dat)               # ====>     udf(plotcode = plot(dat),  title = "plot.tiff")
tiff("myplot.tiff")    
plot(dat)               
dev.off()

К сожалению, он только отображает данные и не экспортирует это в файл. Насколько я понимаю, это потому, что я открываю графическое устройство, когда использую функцию экспорта, чтобы он больше не распознавал plotcode ?

Я нашел одно альтернативное решение, do.call fn, но он позволяет разделить plotcode на две части: (1) имя fn и (2) аргументы. Я надеюсь сохранить plotcode вместе, чтобы его было легче скопировать / вставить позже.

Может быть, есть еще один вариант, о котором я не думаю?

1 Ответ

0 голосов
/ 08 февраля 2020

Следующий код позволяет передать код, который создает график, создать график и сохранить график.

library(tidyverse)

udf <- function(plotcode, title){
  eval(plotcode)
  ggsave(title)
}

udf('qplot(mtcars$mpg)', 'plot.jpg')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...