[R] automatically calling dev.off()
axionator
axionator at gmail.com
Tue Sep 1 17:36:34 CEST 2015
Yes, it's a different model, but maybe my main problem is that Rserve does
not handle addTaskCallback as in the console (and thus no dev.off() is
called).
On Tue, Sep 1, 2015 at 5:00 PM, Duncan Murdoch <murdoch.duncan at gmail.com>
wrote:
> On 01/09/2015 10:13 AM, axionator wrote:
> > Yes, the user could add something. Here, In about 90% of the time, he
> > won't. So it would be nice to have a dev.off() as default (and some
> > extra handling if more plot commands will follow).
>
> That's a different mental model of how graphics should work, and it's
> not compatible with standard R graphics. However, it would be pretty
> easy to get this to work with a grid graphics based systems (e.g.
> ggplot2, lattice) since they don't draw anything until you print the
> object: you'd just need to override the print method.
>
> Duncan Murdoch
>
>
> >
> > On Tue, Sep 1, 2015 at 4:04 PM, Duncan Murdoch <murdoch.duncan at gmail.com
> > <mailto:murdoch.duncan at gmail.com>> wrote:
> >
> > 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 <http://keep.me> <- (ctr < total)
> > > if (ctr == total) {
> > > cat("ENDPRINT")
> > > dev.off()
> > > }
> > > keep.me <http://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
> >
> >
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list