[Rd] A small bug in R code of the legend function of the Graphics pacakge (PR#13340)

maechler at stat.math.ethz.ch maechler at stat.math.ethz.ch
Sat Nov 29 18:10:08 CET 2008


>>>>> "ASh" == asherman  <asherman at ksu.ru>
>>>>>     on Thu, 27 Nov 2008 14:30:04 +0100 (CET) writes:

    ASh> Full_Name: Arkady  Sherman
    ASh> Version: 2.8.0
    ASh> OS: Windows XP
    ASh> Submission from: (NULL) (158.195.16.114)


    ASh> Please consider initialization of the "seg.len"
    ASh> variable. It's done only

    ASh> if (do.lines) {  seg.len <- 2 ..,

    ASh> but after the seg.len is used:

    ASh> if (has.pch) {
    ASh> pch <- rep(pch, length.out = n.leg)
    ASh> pt.bg <- rep(pt.bg, length.out = n.leg)
    ASh> pt.cex <- rep(pt.cex, length.out = n.leg)
    ASh> pt.lwd <- rep(pt.lwd, length.out = n.leg)
    ASh> ok <- !is.na(pch) & (is.character(pch) | pch >= 0)
    ASh> x1 <- (if (merge) 
    ASh> xt - (seg.len/2) * xchar

    ASh> so if do.lines isn't specified, but has.pch and merge are specified an error is
    ASh> produced.

but do.lines is never specified.  It can be FALSE (if there are no
lines drawn) and a user can indeed set 'merge = TRUE" in such a
situation.
However, can you think of a situation where this was desirable?
I think it should not have any effect in such a case
{... but unfortunately it currently has ... yet another
     sign that legend() is ``hopelessly over-featured'' ;-) }
and possibly rather give a warning in such a case...


    ASh> Guess that seg.len should be initialized before the condition "if (do.lines)"

not really; it means  'segment length' should not be used unless
segments ("lines") are drawn.

Thank you for your note;  you are right that legend() is not
entirely correct in such a border-line situation.

Regards,
Martin Maechler, ETH Zurich



More information about the R-devel mailing list