[R] automatically calling dev.off()
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Sep 1 16:04:21 CEST 2015
On 01/09/2015 7:34 AM, axionator wrote:
> Hi,
> is there a way to automatically call dev.off()?
> I use options(device="myfunc") to automatically open a device to print to.
> Afterwards, I would like to close it (so that the file is actually written).
> I tried to do it via addTaskCallback, but unfortunately, I have to use
> Rserve and (for any reason), the callback does not work (in the default R
> console on win7 it works, however).
>
> So, the following runs in the R console (but not via Rserve):
>
> mypng <- function(filename = "test.png", ...)
> {
> times <- function(total = 2, str = "Task") {
> ctr <- 0
> function(expr, value, ok, visible) {
> ctr <<- ctr + 1
> keep.me <- (ctr < total)
> if (ctr == total) {
> cat("ENDPRINT")
> dev.off()
> }
> keep.me
> }
> }
> png(filename, ...)
> n <- addTaskCallback(times(1))
> }
> options(device="mypng")
> plot(rnorm(333))
>
It wouldn't make sense to call dev.off() after the plot() command,
because the user might be planning to add something to it. You need to
tell R that you are done, and that's what dev.off() is for.
You can call it automatically in a function by using
on.exit(dev.off())
and it should happen automatically at the end of an R session, but it
*shouldn't* happen after every plotting call.
Duncan Murdoch
More information about the R-help
mailing list