确保图形设备关闭

时间:2014-06-17 16:02:47

标签: r plot

我正在关闭设备(这里:pdf())我正在使用dev.off()绘制我的函数的末尾。但是,如果函数/循环由于错误而终止,则设备保持打开状态。当一个函数被反复调用时,这会导致很多开放设备;和文件句柄。

即使功能失败,如何确保设备关闭?

我记得我曾经看过如何做到这一点,但我记不住了。

2 个答案:

答案 0 :(得分:8)

on.exit()适用于这种情况。每当在非交互式设置中打开(文件或其他)连接时,最好使用它。

f <- function() {
    pdf(tempfile()) # tempfile() so example doesn't clutter up working directory.
    on.exit(dev.off())
    plot(randomNonExistentObjectName)
}

f()
# Error in plot(randomNonExistentObjectName) : 
#   object 'randomNonExistentObjectName' not found

dev.list()
# NULL

答案 1 :(得分:0)

将整个绘图表达式包含在tryCatch中,如下所示:

tryCatch(expr={pdf(...); plot(...)}, finally=dev.off())