我的一些函数接受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
会过早地重置图形设备。
在这种情况下人们做了什么?
答案 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))