[Rd] points(*, pch=NA) does *not* not draw the point (PR#6876)

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed May 12 16:20:56 CEST 2004


On Wed, 12 May 2004 maechler at stat.math.ethz.ch wrote:

> We say in ?points  that 'pch' (among others) can be set to NA
> for omitting a point.

I don't think we actually do.  We say 

     Points whose 'x', 'y', 'pch', 'col' or 'cex' value is 'NA' are
     omitted from the plot.

and earlier

     either be a 'character' or an integer code

I read that to mean that as.logical(NA) is incorrect, but that 
as.character(NA) is correct and should result in the point being omitted.

In short, I disagree as to which is a very strict bug (although it makes 
sense to allow logical NAs, of course).

The problems are both in FixupPch in src/main/plot.c.  Can I leave you to 
fix both?

> While this works in cases where there's at least one point left
> to draw, it fails in a simple case like this :
> 
> > plot(1, pch = NA)
> Error in plot.xy(xy.coords(x, y), type = type, pch = pch, col = col, bg = bg,  : 
> 	invalid plotting symbol
> 
> Both in R-patched or R-devel.
> A simple workaround {hinting at how to fix the C code} is
> 
> > plot(1, pch = as.integer(NA))
> 
> So this is easily fixable (and I'll commit a patch soon).
> 
> ----
> 
> A bit more problematic *) but not a bug in a very strict sense
> is the following : 
> 
>  > plot(1, pch = as.character(NA))
> and
>  > plot(1:4, pch=c("o",".", NA, "x"))
> 
> which are identical to
> 
>  > plot(1, pch = "N")
> and
>  > plot(1:4, pch=c("o",".", "N", "x"))
> 
> but should either produce a warning (additional to using "N") or
> rather also treat the NA as "missing", i.e., not drawing a point.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list