From jwiley.psych at gmail.com  Sun Feb 20 08:34:29 2011
From: jwiley.psych at gmail.com (Joshua Wiley)
Date: Sat, 19 Feb 2011 23:34:29 -0800
Subject: [Rd] dotchart {graphics} 2.11.1 vs. 2.12.1 [followed up from
	Rhelp]
In-Reply-To: <alpine.LFD.2.02.1102180948500.32212@toucan.stats.ox.ac.uk>
References: <AANLkTi=-Ja17h9X2cx1AJB-+a7dK7tQUSK2SBP+fMZMy@mail.gmail.com>
	<alpine.LFD.2.02.1102180948500.32212@toucan.stats.ox.ac.uk>
Message-ID: <AANLkTinWTuZLBtV6XE8F=mARxokqjmK55+ZCZude803p@mail.gmail.com>

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



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