我想自动将所有绘图重定向到一个文件(原因:见下文)。有没有一种简单的方法来实现这一点?
缺少它,我实际上并不害怕覆盖内置函数,我很绝望。我能想到的最简单的方法是连接到基本的绘图窗口创建函数并调用pdf(…)
,然后连接到绘图完成函数并dev.off()
在那里调用。
但是这些功能是什么?通过调试,我初步确定了dev.hold
——dev.flush
但这真的普遍存在吗?我可以挂钩这些功能吗?我不能用R.utils
'覆盖它们,reassignInNamespace
因为它们已被锁定,并且仅将同名函数放入全局命名空间是行不通的(它们被 忽略plot
)。
那么,我为什么要做这么可怕的事情呢?
因为我在远程服务器上工作,尽管我尽了最大努力,并且与我们的系统支持进行了长时间的调试会话,但我无法让 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
呼叫以尽可能简化它。
有机会吗?