[Rd] xspline(..., draw=FALSE) fails if there is no open device (PR#10728)

p.dalgaard at biostat.ku.dk p.dalgaard at biostat.ku.dk
Fri Feb 8 15:45:08 CET 2008


jari.oksanen at oulu.fi wrote:
> Full_Name: Jari Oksanen
> Version:  2.6.2 RC (2008-02-07 r44369)
> OS: Linux
> Submission from: (NULL) (130.231.102.145)
>
>
> Even if function xspline() is called with argument draw=3DFALSE, it req=
uires a
> graphics device (that it won't use since it was draw=3DFALSE). I run in=
to this
> because I intended to use xspline within a function (that does not yet =
draw:
> there is plot method for that), and the function failed when called in =
a virgin
> environment.=20
>
> Here is an example in a virgin environemt just after starting R:
>
>  =20
>> out <- xspline(c(0,1,0), c(1,0,1), draw=3DFALSE)
>>    =20
> Error in xspline(c(0, 1, 0), c(1, 0, 1), draw =3D FALSE) :=20
>   plot.new has not been called yet
>  =20
>> str(out)
>>    =20
> Error in str(out) : object "out" not found
>
> This works:
>
>  =20
>> plot(0)
>> out <- xspline(c(0,1,0), c(1,0,1), draw=3DFALSE)
>> str(out)
>>    =20
> List of 2
>  $ x: num [1:3] 0 1 0
>  $ y: num [1:3] 1 0 1
>
> This won't:
>
>  =20
>> dev.off()
>>    =20
> null device=20
>           1=20
>  =20
>> xspline(c(0,1,0), c(1,0,1), draw=3DFALSE)
>>    =20
> Error in xspline(c(0, 1, 0), c(1, 0, 1), draw =3D FALSE) :=20
>   plot.new has not been called yet
>
> R graphics internal are black magic to me. However, it seems that the e=
rror
> messge comes from function GCheckState(DevDesc *dd) in graphics.c, whic=
h is
> called by do_xspline(SEXP call, SEXP op, SEXP args, SEXP env) in plot.c=
 even
> when xspline was called with draw =3D FALSE (and even before getting th=
e argument
> draw into do_xspline). It seems that graphics device is needed somewher=
e even
> with draw =3D FALSE, since moving the  GCheckState() test after findig =
the value
> draw, and executing the test only if draw=3DTRUE gave NaN as the numeri=
c output.=20
>
> If this is documented behaviour, the documentation escaped my attention=
 and beg
> for pardon. It may be useful to add a comment on the help page saying t=
hat an
> open graphics device is needed even when unused with draw=3DFALSE.
>
>  =20

I think the reason is that 2d splines are aspect ratio dependent. =20
There's this loop inside,

    for (i =3D 0; i < nx; i++) {
        xx[i] =3D x[i];
        yy[i] =3D y[i];
        GConvert(&(xx[i]), &(yy[i]), USER, DEVICE, dd);
    }
=20
and that will not work without knowing how to convert to device=20
coordinates. The default for "border" may get you first, though.  That=20
seems to be documented incorrectly, by the way.

    -p

> Cheers, Jari Oksanen
>
>  platform =3D i686-pc-linux-gnu
>  arch =3D i686
>  os =3D linux-gnu
>  system =3D i686, linux-gnu
>  status =3D RC
>  major =3D 2
>  minor =3D 6.2
>  year =3D 2008
>  month =3D 02
>  day =3D 07
>  svn rev =3D 44369
>  language =3D R
>  version.string =3D R version 2.6.2 RC (2008-02-07 r44369)
>
> Locale:
> LC_CTYPE=3Den_GB.UTF-8;LC_NUMERIC=3DC;LC_TIME=3Den_GB.UTF-8;LC_COLLATE=3D=
en_GB.UTF-8;LC_MONETARY=3Den_GB.UTF-8;LC_MESSAGES=3Den_GB.UTF-8;LC_PAPER=3D=
en_GB.UTF-8;LC_NAME=3DC;LC_ADDRESS=3DC;LC_TELEPHONE=3DC;LC_MEASUREMENT=3D=
en_GB.UTF-8;LC_IDENTIFICATION=3DC
>
> Search Path:
>  .GlobalEnv, package:stats, package:graphics, package:grDevices, packag=
e:utils,
> package:datasets, package:methods, Autoloads, package:base
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>  =20


--=20
   O__  ---- Peter Dalgaard             =D8ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327=
918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327=
907



More information about the R-devel mailing list