From gavin.simpson at ucl.ac.uk  Thu Nov 29 18:19:29 2007
From: gavin.simpson at ucl.ac.uk (Gavin Simpson)
Date: Thu, 29 Nov 2007 17:19:29 +0000
Subject: [Rd] Problem with points/lines (PR#10472)
In-Reply-To: <474EEA0D.1030601@biostat.ku.dk>
References: <20071127162525.F0836283416B@mail.pubhealth.ku.dk>
	<474EDC63.7090107@biostat.ku.dk>
	<1196352228.29290.111.camel@gsimpson.geog.ucl.ac.uk>
	<474EEA0D.1030601@biostat.ku.dk>
Message-ID: <1196356769.29290.120.camel@gsimpson.geog.ucl.ac.uk>

On Thu, 2007-11-29 at 17:34 +0100, Peter Dalgaard wrote:
> Gavin Simpson wrote:
> > On Thu, 2007-11-29 at 16:36 +0100, Peter Dalgaard wrote:
> >   
> >> carlos at necsi.org wrote:
> >>     
> >>> Full_Name: Carlos Gershenson
> >>> Version: 2.6.1
> >>> OS: MacOSX
> >>> Submission from: (NULL) (24.128.48.138)
> >>>
> >>>
> >>> Hi,
> >>>
> >>> Try this out:
> >>>
> >>> x<-1:10
> >>> y<-x/2
> >>> plot(table(x))
> >>> points(table(y))
> >>> #or lines(table(y))
> >>>
> >>> No matter what's the value of y, it prints out in the coordinates of x... this
> >>> happens only with tables, not with simple plot(x), points(y), and table(y) works
> >>> fine
> >>>
> >>>   
> >>>       
> >> The real issue is that we have a plot method for tables, which tries to
> >> be smart about using numerical entry names. There's no similar points
> >> method, nor a lines method, so in those cases you get the default
> >> method, namely to plot the table values (all ones) against the *index*,
> >> i.e.,1:n. This shows the effect quite clearly:
> >>
> >> plot(table(x^2)
> >> lines(table(x))
> >>
> >> (This is not a bug, since noone has promised you that lines and point
> >> methods should exist. It could be taken as an enhancement request.)
> >>     
> >
> > Peter,
> >
> > Re: your final statement above, would an enhancement request be looked
> > upon favourably by R Core for inclusion in R if some code and
> > documentation were supplied?
> >   
> As always, there is a risk that it falls through the cracks before
> someone gets around to looking at it.
> 
> Your code look sane though, and as far as I can see, you do not even
> have to do much in terms of documentation since it could be wedged into
> the existing plot.table() help page.
> 
> For now, we could file under "wishlist". As you know, items on the
> wishlist do in fact get fulfilled sometimes.
> 
>     -p

OK. I'll prepare a patch against the R development SVN for the Rd file
and take another look at the code I wrote. Can you refile this bug under
"wishlist" or do I need to submit another bug report to achieve this?

All the best,

G

> > I replied earlier in the week to Carlos' query on R-Help (seems this has
> > taken 2 days to get the R-Devel?) with some quickly knocked together
> > code for points.table and Axis.table methods that were based in large
> > part on the code in plot.table. I reproduce these below. They were based
> > on printing the source plot.table at the prompt, not from interrogation
> > of the SVN version.
> >
> > If considered for inclusion, I'd be happy to get these in better shape
> > and write appropriate Rd files as required?
> >
> > All the best,
> >
> > G
> >
> > ## points and Axis methods for objects of class "table"
> > ## Gavin Simpson 2007 based in large part on plot.table
> > `points.table` <- function (x, type = "h", ...)
> > {
> >      rnk <- length(dim(x))
> >      if (rnk == 0)
> >          stop("invalid table 'x'")
> >      if (rnk == 1) {
> >          nx <- dimnames(x)[[1]]
> >          ow <- options(warn = -1)
> >          is.num <- !any(is.na(xx <- as.numeric(nx)))
> >          options(ow)
> >          x0 <- if (is.num)
> >              xx
> >          else seq.int(x)
> >          points(x0, unclass(x), type = type, ...)
> >      }
> >      else stop("only for 1-D table")
> > }
> >
> > `Axis.table` <- function(x, at, ..., labels)
> > {
> >      rnk <- length(dim(x))
> >      if (rnk == 0)
> >          stop("invalid table 'x'")
> >      if (rnk == 1) {
> >          nx <- dimnames(x)[[1]]
> >          ow <- options(warn = -1)
> >          is.num <- !any(is.na(xx <- as.numeric(nx)))
> >          options(ow)
> >          x0 <- if (is.num)
> >              xx
> >          else seq.int(x)
> >          if(missing(at))
> >              at <- x0
> >          if(missing(labels))
> >              labels <- nx
> >          xaxt <- if (length(as <- list(...))) {
> >              if (!is.null(as$axes) && !as$axes)
> >                  "n"
> >              else as$xaxt
> >          }
> >          axis(1, at = at, labels = labels, xaxt = xaxt)
> >      }
> >      else stop("only for 1-D table")
> > }
> >
> > ## example to run with:
> > set.seed(1234)
> > x <- sample(1:10, 30, replace = TRUE)
> > y <- x / 2
> > plot(table(x), type = "p")
> > points(table(y), col = "red", type = "p", pch = 2)
> >
> > ## And if you need to redraw axes
> > ## need to use Axis() as it is a generic version of axis()
> > plot(table(x), type = "p", axes = FALSE)
> > points(table(y), col = "red", type = "p", pch = 2)
> > Axis(table(y))
> >
> >   
> 
> 
> -- 
>    O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
>   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
>  (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907
> 
> 
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



[Rd] Problem with points/lines (PR#10472)
Gavin Simpson