[Rd] points(*, pch=NA) does *not* not draw the point (PR#6876)
maechler at stat.math.ethz.ch
maechler at stat.math.ethz.ch
Wed May 12 16:34:47 CEST 2004
>>>>> "BDR" == Prof Brian Ripley <ripley at stats.ox.ac.uk>
>>>>> on Wed, 12 May 2004 15:20:56 +0100 (BST) writes:
BDR> 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.
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.
More information about the R-devel
mailing list