我正在关闭设备(这里:pdf())我正在使用dev.off()绘制我的函数的末尾。但是,如果函数/循环由于错误而终止,则设备保持打开状态。当一个函数被反复调用时,这会导致很多开放设备;和文件句柄。
即使功能失败,如何确保设备关闭?
我记得我曾经看过如何做到这一点,但我记不住了。
答案 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())