3

我想自动将所有绘图重定向到一个文件(原因:见下文)。有没有一种简单的方法来实现这一点?

缺少它,我实际上并不害怕覆盖内置函数,我很绝望。我能想到的最简单的方法是连接到基本的绘图窗口创建函数并调用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呼叫以尽可能简化它。

有机会吗?

4

1 回答 1

5

如果您设置options(device=FUN),则图形设备功能FUN将成为新的默认图形设备,将在创建绘图且尚未打开设备时打开。

因此,一种选择是编写一个函数,使用您想要的文件名和选项(可能在 中)调用pdf或其他图形设备,然后将此函数设置为选项中的默认值。您可能需要使用 、 或 之一来完成当前绘图(在您关闭设备或转到新绘图之前,R 不会最终确定,以防您想向当前绘图添加任何内容)。pngonefile=FALSEpdfdev.offplot.newframe

如果您永远不会添加到情节中,那么您可以使用自动为您addTaskCallback调用。dev.off可能还有其他钩子可以用来完成。

于 2013-07-12T16:29:56.633 回答