On Fri, Feb 18, 2011 at 5:44 AM, Prof Brian Ripley <rip...@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, rip...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel