r - R:创建一个用户定义的函数来绘制数据然后导出绘图
问题描述
简单的目标:我正在尝试创建一个用户定义的 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()
不幸的是,它只绘制数据而不将其导出到文件中。据我了解,这是因为我在使用导出功能时打开了图形设备,所以它不再识别绘图代码了?
我确实找到了另一种解决方案,即do.call
fn,但它使您将plotcode分成两部分:(1)fn 名称和(2)参数。我希望将情节代码保持在一起,以便以后复制/粘贴更容易。
也许还有另一个我没有想到的选择?
解决方案
以下代码可让您传递创建绘图、创建绘图和保存绘图的代码。
library(tidyverse)
udf <- function(plotcode, title){
eval(plotcode)
ggsave(title)
}
udf('qplot(mtcars$mpg)', 'plot.jpg')
推荐阅读
- python - 如何分别从 python 套接字服务器与客户端通信?
- python - Python Pandas Dataframe - 当长度变长时剪切字符串的特定部分
- email - 如何为托管在 ubuntu 上的 mailcow 电子邮件服务器生成 swagger 文件
- python - 我正在尝试创建一个聊天机器人,但我正处于显示错误的部分:'similarity_scores_list' 未定义。让我给你看一些代码
- javascript - 如何同时清除输入值和重定向
- c++ - C/C++:我们何时以及为什么需要在 TLS 客户端-服务器应用程序中调用 SSL_do_handshake()?
- linux - 如何将文件的行随机插入另一个文本文件?
- vb.net - TableLayoutPanel 右对齐文本不打印
- javascript - 在三角形边框中使用液体效果制作蛇效果
- typescript - 将类型指定为与新属性合并的接口?