【问题标题】:Error in dev.off() : cannot shut down device 1 (the null device)dev.off() 中的错误:无法关闭设备 1(空设备)
【发布时间】:2017-06-02 19:33:27
【问题描述】:

我是 R 编程新手,在尝试运行代码时遇到了这个错误。这只是创建了一个包含一些数据的饼图。谁能向我解释为什么我会收到此错误及其含义?

1) 我正在运行 Windows 2) 版​​本 3.4.0 3) 我正在使用 RGui 桌面 4) R 版本 3.4.0

# Create data for the graph.
x <- c(21, 62, 10, 53)
labels <- c("London", "New York", "Singapore", "Mumbai")

# Give the chart file a name.
png(file = "city_title_colours.jpg")

# Plot the chart with title and rainbow color pallet.
pie(x, labels, main = "City pie chart", col = rainbow(length(x)))

# Save the file.
dev.off()

【问题讨论】:

  • 1.) 您使用的是什么操作系统(Windows、Mac OS X、Linux)? 2.) 你正在运行什么版本的 RStudio(打开 RStudio,转到帮助 > 关于 RStudio)? 3.) 您使用的是 RStudio 桌面版还是服务器版(您是从已安装的应用程序还是从 Web 浏览器运行它)? 4.) 你安装的是什么版本的R(在R控制台输入命令versionsessionInfo())?
  • 只有一次。我每次都运行整个脚本,结果就是这样
  • pie(...) 之后执行dev.cur() 会得到什么?您是否尝试关闭 R 并再次打开它然后运行代码?错误是否仍然存在?
  • @user7843120 我在运行 dev.cur() 后得到 png 2。我也试过关闭R再打开,同样的问题
  • 我也遇到了以前工作的代码(Mac 上的 RStudio)的问题。我更新了 R,并更新了 Java。该代码在 R 本身中运行良好,所以这显然是一个 R-studio 问题。

标签: r


【解决方案1】:

试试

while (!is.null(dev.list()))  dev.off()

【讨论】:

    【解决方案2】:

    我遇到了这种情况并通过运行以下 2 或 3 次解决了它:

    dev.set(dev.next())
    

    控制台最终应该会吐出:

    quartz_off_screen 
                    3
    

    一旦你看到这个,情节就会呈现出来。

    附:你也许可以用同样的方式使用dev.set(dev.prev())

    【讨论】:

    • 这对我不起作用。您能否详细说明为什么它可能有用或可能没有帮助?
    【解决方案3】:

    就我而言,错误的原因也很愚蠢。万一有人遇到同样的问题...

    dev.off
    

    将导致:

    function (which = dev.cur()) 
    {
        if (which == 1) 
            stop("cannot shut down device 1 (the null device)")
        .External(C_devoff, as.integer(which))
        dev.cur()
    }
    <bytecode: 0x0000000028e62bd8>
    <environment: namespace:grDevices>
    

    不要忘记函数括号:

    dev.off()
    

    【讨论】:

      【解决方案4】:

      事实证明,唯一的问题是文件试图保存到的位置。我更改了代码以保存到不同的目录,它工作正常

      【讨论】:

        【解决方案5】:

        当我遇到这个问题时,我试图运行 dev_off() 以及尝试从我正在处理的 Rchunk 创建的文件。为了修复它,我突出显示了整个块并尝试重新运行它。上面没有说,所以我想在需要时添加对问题的可能帮助。

        【讨论】:

        • 补充:如果您运行 RStudio,通过在 RMarkdown-File 中的一个块中运行打印命令来使用此方法不起作用(一直),我将打印命令复制到控制台它完美无缺。