首页 > 解决方案 > R:创建一个用户定义的函数来绘制数据然后导出绘图

问题描述

简单的目标:我正在尝试创建一个用户定义的 fn ( udf),它允许我组合几行代码,使其更简洁且更易于阅读。

让我们举一个简单的例子。在一个 fn 中,我想绘制一些数据,然后使用tifffn(或任何类似的 fn: pngjpeg、 ...)导出绘图。但是,我希望能够使用我选择的任何绘图函数,所以我认为将代码块(我们称之为' 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()

不幸的是,它只绘制数据而不将其导出到文件中。据我了解,这是因为我在使用导出功能时打开了图形设备,所以它不再识别绘图代码了?

我确实找到了另一种解决方案,即do.callfn,但它使您将plotcode分成两部分:(1)fn 名称和(2)参数。我希望将情节代码保持在一起,以便以后复制/粘贴更容易。

也许还有另一个我没有想到的选择?

标签: rplotexportuser-defined-functions

解决方案


以下代码可让您传递创建绘图、创建绘图和保存绘图的代码。

library(tidyverse)

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

udf('qplot(mtcars$mpg)', 'plot.jpg')

推荐阅读