From maechler at stat.math.ethz.ch  Wed May 12 16:34:47 2004
From: maechler at stat.math.ethz.ch (maechler@stat.math.ethz.ch)
Date: Wed May 12 16:34:51 2004
Subject: [Rd] points(*, pch=NA) does *not* not draw the point (PR#6876)
Message-ID: <20040512143447.B6063104CD@slim.kubism.ku.dk>

>>>>> "BDR" == Prof Brian Ripley <ripley@stats.ox.ac.uk>
>>>>>     on Wed, 12 May 2004 15:20:56 +0100 (BST) writes:

    BDR> On Wed, 12 May 2004 maechler@stat.math.ethz.ch wrote:
    >> We say in ?points that 'pch' (among others) can be set to
    >> NA for omitting a point.

    BDR> I don't think we actually do.  We say

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

    BDR> and earlier

    BDR>      either be a 'character' or an integer code

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

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

You're right, with both statements.

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

yes, I've been in there anyway.

There's one remaining design decision:

At the moment I'd go to allow 'logical' and coerce that to
integer (as in many other S code places).  
Alternatively, more strict behavior would only allow NA logicals
and give an error for TRUE or FALSE entries in pch vectors.
I currently think it's not worth the extra check.

    >> 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.


[Rd] points(*, pch=NA) does *not* not draw the point (PR#6876)
maechler@stat.math.ethz.ch