[R] Trellis device automatism [was "X11 device now needs ..?"]

Martin Maechler maechler at stat.math.ethz.ch
Fri Jan 17 11:27:03 CET 2003

>>>>> "Deepayan" == Deepayan Sarkar <deepayan at stat.wisc.edu>
>>>>>     on Thu, 16 Jan 2003 15:20:20 -0600 writes:

    Deepayan> On Thursday 16 January 2003 02:10 pm, Patrick Connolly wrote:
    >> On Wed, 15-Jan-2003 at 10:47PM -0600, Deepayan Sarkar wrote:
    >> |> On Wednesday 15 January 2003 07:35 pm, Patrick Connolly wrote:

    R version 1.6.2

    >> |> > Until this version, I've not had to explicitly start the x11 device.
    >> |> > Now, (at least with lattice plots), one is not automatically started
    >> |>
    >> |> Could you explain ? There's sometimes a warning, but I haven't seen
    >> |> the device not being opened.
    >> On closer inspection, I see that it falls over earlier than the
    >> plotting itself.  It arises when I attempt to adjust some trellis
    >> settings.  This is the message:
    >> Error in trellis.par.set(y, x) : No device is currently Active
    >> I notice that trellis.par.set has been changed this time.
    >> "trellis.par.set" <-
    >> function (name, value, warn = TRUE)
    >> {
    >>  if (!is.list(value))
    >>     stop("value must be a list")
    >>  if (warn && is.null(dev.list()))
    >>     stop("No device is currently Active")
    >>  lattice.theme[[.Device]][[name]] <<- value
    >> }
    >> Previously, it had been only the last line.
    >> The problem arises because dev.list() returns NULL if no device is
    >> open and thus the call to stop().
    >> I don't know whether it would be a good idea to have trellis.par.set
    >> start the default device.
    >> Ideas?

    Deepayan> Personally, I don't have any strong preferences,
    Deepayan> other than that the old behaviour (which silently
    Deepayan> did nothing, if I remember correctly) should be
    Deepayan> changed. Maybe we should go with S-PLUS behaviour,
    Deepayan> which gives an error if trellis.par.set() is
    Deepayan> called without an open device, but DOES start the
    Deepayan> default device if trellis.par.get() is
    Deepayan> called. This would mean that lset() would also
    Deepayan> start the device.

    Deepayan> Does that sound OK ?

partially.  I would provide this *at least*

Couldn't you even do more automatism, namely, start the default
device even for trellis.par.set().
This would be "compatible" with a non-lattice graphics call of
   par("<name>")    [ ~= trellis.par.get(.) ]    and
   par(<name> = ..) [ ~= trellis.par.set(.) ]    


Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><

More information about the R-help mailing list