Ввод функции используется как строка - PullRequest
0 голосов
/ 26 мая 2018
saving_ggplot <- function(name = 'default', plotname = last_plot()) {
  image_name = paste(name, ".png", sep="")
  ggsave(image_name, plot = plotname,
         scale = 1, 
         dpi = 300, limitsize = TRUE)
}

Это моя функция, которая сохраняет ggplot.Однако я на всю жизнь не могу понять, как принять аргумент имени в виде строки.

Например, если кто-то запустит saving_ggplot(FILENAME, PLOTNAME)

, он просто скажет, что нет объекта FILENAME.В Python я могу просто захватить его и использовать как str(), но использование as.character или toString в R по-прежнему не работает.


Ошибка :

saving_ggplot(weightvsageTEST, weightvsageplot)
Error in paste(name, ".png", sep = "") : 
  object 'weightvsageTEST' not found

Успешный вызов с использованием ggsave:

ggsave('weightvsage.png', plot = last_plot(),
       scale = 1, 
       dpi = 300, limitsize = TRUE)

1 Ответ

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

Вы можете использовать substitute():

saving_ggplot <- function(name, plotname) {
  image_name = paste0(substitute(name), ".png") # paste0 removes need for sep arg
  ggsave(image_name, plot = plotname,
         scale = 1, 
         dpi = 300, limitsize = TRUE)
}

saving_ggplot(foo, p) # saves foo.png

В качестве альтернативы, если вы хотите остаться в пределах tidyverse синтаксиса квази-цитаты , используйте enexpr() вместо:

enexpr(name) # instead of substitute(name)

Данные:

N <- 100
df <- data.frame(x=rnorm(n=N), y=rnorm(n=N))
p <- ggplot(df, aes(x,y)) + geom_smooth()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...