如何从父母调用on.exit()?

时间:2013-08-09 20:18:58

标签: r

我的一些函数接受file参数(默认为NULL)来设置图形输出文件。例如,foo()将绘制到屏幕上,foo(file="bar.png")会将绘图写入文件"bar.png"

他们有这段代码:

  if (!is.null(file)) {
    cat("*** writing",file,"\n")
    do.call(tools::file_ext(file),list(file = file)) # set the device
    on.exit(dev.off())
  }

我希望我可以创建一个替换这5行的函数,但是,唉,我不能,因为on.exit会过早地重置图形设备。

在这种情况下人们做了什么?

1 个答案:

答案 0 :(得分:0)

这种重复最好通过创建一个带有代码块并在special context中对其进行求值的函数来处理。例如,您可以写:

capture_png <- function(file, code) {
  if (!is.null(file)) {
    message("writing ", file)
    png(file)
    on.exit(dev.off())
  }
  code
}

capture_png(NULL, plot(1:10))
capture_png("test.png", plot(1:10))