【问题标题】:Can't seem to turn off a device using dev.off() in R似乎无法在 R 中使用 dev.off() 关闭设备
【发布时间】:2016-02-02 19:10:39
【问题描述】:

我正在使用在 OSX 中运行 R 内核 (3.2.2) 的 Jupyter 笔记本,完成一些基本的统计练习。几天前,我第一次玩 ggplot,并从笔记本单元运行一些命令,尝试打印到 pdf 文件,换句话说,使用类似以下内容:pdf("file.pdf"); plot(x, y); dev.off()我没有保留任何这些单元格内容,所以我看不到我运行的确切内容,但我想有可能我创建了一些 pdf 文件并且没有包含 dev.off() 命令?

我的问题是,自那次会议以来,现在我在任何笔记本中运行的每个单元格(包括新的空白单元格)都会生成一个不需要的 pdf 文件。如果该代码涉及绘制图形,则 pdf 包含该图形,如果代码是其他任何内容,则无法打开创建的 pdf。我找不到任何方式来阻止这些 pdf 文件的创建。

如果我去一个新的空白笔记本:

运行dev.list() 返回pdf: 2
运行dev.cur() 返回pdf: 2
运行dev.off() 返回null device: 1

但是,如果紧接着,我再次运行dev.list()dev.cur(),它们再次返回pdf: 2

我能够打开更多新设备,dev.off() 成功关闭它们。但是这个pdf: 2 设备不会消失。我尝试终止所有会话,重新启动机器等,但无济于事;建议?

此外,如果我从终端中的控制台运行 pdf() 命令(即,不是从笔记本电脑),我的绘图显示为由 Quartz 生成;我知道这可能是 Quartz 问题而不是 R 问题,但我的问题仍然存在,我该如何关闭此设备,或者以其他方式阻止创建所有这些 pdf?

【问题讨论】:

  • 您是否尝试过两次运行 dev.off() 命令? dev.off();dev.off() 有时我发现我必须关闭一个额外的设备,即使我没有打开一个额外的设备。
  • 感谢您的建议。我没有这样做,但它不起作用。它返回Error in dev.off(): cannot shut down device 1 (the null device),然后像以前一样,dev.list()dev.off() 继续返回pdf: 2
  • 请注意,至少有一个设备需要处于活动状态,因此如果您尝试关闭最后一个设备,则会收到错误消息。但如果您打开了多个设备,您可以使用 dev.off() 关闭其中的一些。

标签: r pdf jupyter


【解决方案1】:

sink() 已打开但未关闭时,这可能会出现问题,可能是因为在到达关闭代码之前发生了错误。

试试这个塞一个打开的水槽:

sink(NULL)
ht @mdsumner

【讨论】:

    【解决方案2】:
    graphics.off() 
    

    应该强制关闭所有设备。查看this page 了解更多有用信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多