[Rd] dotchart {graphics} 2.11.1 vs. 2.12.1 [followed up from Rhelp]

Joshua Wiley jwiley.psych at gmail.com
Sun Feb 20 08:34:29 CET 2011


On Fri, Feb 18, 2011 at 5:44 AM, Prof Brian Ripley
<ripley at stats.ox.ac.uk> wrote:
> On Tue, 1 Feb 2011, Joshua Wiley wrote:
>
>> Dear List,
>>
>> With the R 2.12.0 addition of table methods for points(), dotchart()
>> struggles with tables.
>
> Which of course it is not documented to accept, not even the base type of
> such tables, a 1-D array.  So this is detecting a previously undetected user
> error.

Of course, I hope my wording did not imply there was any problem or
error.  I was interested in "what is the best way to make this work?"

>
> Because the table methods of lines/points have different defaults, your
> suggestions are not going to work (did you actually try them with the
> dotchart example?).

I thought I had, but evidently not.

>The best we can do is to throw an error if 'y' is
> specified in a table method.
>
>> I found several possible solutions, but it is beyond my skill to decide
>> what is "best".  Here is a small example:
>
> dotchart(as.vector(x)) works, but is probably not what you want.
> dotchart(unclass(x)) works, but it is not guaranteed to keep working.
>
> Unclassing is definitely dangerous, since the test is.numeric(x) invokes a
> generic function.  If methods have been written following the help page (and
> not all have), as.numeric(x) should do the trick, but needs to be done after
> names are extracted.

I take it creating a named vector using name extraction and
as.numeric(x) is the best approach.

Thanks for the information,

Josh

>
> OTOH, learning the discipline of consulting the help pages if things do not
> work as you expect is a good one, since there is no way R is going to check
> all inputs to all functions.
>
>
>> #############################################
>> x <- table(infert$education)
>> y <- 1:3L
>>
>> dotchart(x) # error about incorrect plot type
>>
>> ## moving closer to the cause, dotchart() essentially does
>> plot(x = c(0, 150), y = c(0, 5), type = "n")
>> points(x, y) # error, because arg #2 is the type
>>
>> ## One option would be to explicitly name the arguments in dotchart()
>> points(x = x, y = y) # "works", but misses the point (no pun intended)
>>
>> ## Another possibility would be to add unclass(). I'm not sure
>> ## if this would have other repercussions.  line 71 could become:
>> points(unclass(x), y, pch = pch, col = color, bg = bg)
>>
>> ## Other options could be adding a method for dotchart()
>> ## or to update the table method for points()
>> points.table <- function (x, y, type = "h", lwd = 2, ...)
>> {
>>   if (length(dim(x)) == 1L) {
>>       nx <- dimnames(x)[[1L]]
>>       is.num <- suppressWarnings(!any(is.na(xx <- as.numeric(nx))))
>>       x0 <- if (is.num)
>>           xx
>>       else seq.int(x)
>>       if (missing(y)) {
>>         points(x0, unclass(x), type = type, lwd = lwd, ...)
>>       } else points(unclass(x), y, type = type, lwd = lwd, ...)
>>   }
>>   else stop("only for 1-D table")
>> }
>>
>> plot(x = c(0, 150), y = c(0, 5), type = "n")
>> points(x, y, type = "p")
>>
>> #############################################
>>
>>
>>
>> --
>> Joshua Wiley
>> Ph.D. Student, Health Psychology
>> University of California, Los Angeles
>> http://www.joshuawiley.com/
>
> --
> 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