函数输入用作字符串

时间:2018-05-26 14:41:12

标签: r

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的功能。但是,我对于我的生活无法弄清楚如何将name参数作为字符串。

例如,如果有人符文saving_ggplot(FILENAME, PLOTNAME)

它只会说没有对象FILENAME。在python中,我可以捕获它并将其用作str(),但在R中使用as.charactertoString仍然无效。

错误

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 :(得分:2)

您可以使用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 quasiquotation syntax内,请改为使用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()