我想自动将所有绘图重定向到文件(原因:见下文)。是否有一种非黑客的方式来实现这一目标?
缺乏这一点,我实际上并不害怕覆盖内置函数,我 绝望。我能想到的最简单的方法是挂钩基本的绘图窗口创建函数并调用pdf(…)
,然后挂钩到plot-finalizing函数并在那里调用dev.off()
。
但这些功能是什么?通过调试,我暂时确定了dev.hold
和dev.flush
- 但这实际上是否真的普遍存在?我可以挂钩这些功能吗?我无法使用R.utils
'reassignInNamespace
覆盖它们,因为它们已被锁定,只是将同名函数放入全局命名空间不起作用(它们被plot
忽略)。 / p>
那么,为什么我想做一些如此可怕的事情?
因为我正在使用远程服务器,尽管我有最好的尝试,并且在我们的系统支持下进行了长时间的调试,但我无法让X11转发工作可靠。无法预览情节会使我的工作流程非常低效。我已经放弃尝试让X11工作,所以现在我在我的public_html
文件夹中创建PDF并刷新浏览器。
这非常有效 - 除了用pdf(…) … dev.off()
总是围绕你的绘图函数调用真的很烦人且非常耗时,特别是在你想要快速创建绘图的交互式会话中与合作者会面。事实上,它真的很烦人,他们(可以理解)没有耐心等待。
现在我正在帮助自己完成以下功能定义:
preview <- function (.expr, ...) {
on.exit(dev.off())
pdf(PREVIEW_FILE_NAME, ...)
eval(substitute(.expr))
}
使用方法如下:
preview(plot(1:100, rnorm(100) * 1:100))
一切正常。但这个工作流程在会议中是一个真正的瓶颈,我想摆脱preview
调用以尽可能简化它。
有机会吗?
答案 0 :(得分:4)
如果设置options(device=FUN)
,那么图形设备功能FUN
将成为新的默认图形设备,在创建绘图并且设备尚未打开时将打开该设备。
因此,一个选项是编写一个调用pdf
或png
或其他图形设备的函数,其中包含您想要的文件名和选项(可能onefile=FALSE
pdf
}),然后将此函数设置为选项中的默认值。您可能需要使用dev.off
,plot.new
或frame
中的一个来完成当前的绘图(在您关闭设备或转到新的绘图之前,R不会最终确定向当前情节添加任何内容。)
如果您永远不会添加到情节中,那么您可以使用addTaskCallback
自动为您调用dev.off
。可能还有其他钩子可用于最终确定。