From p.murrell at auckland.ac.nz  Tue Jun 21 05:18:34 2005
From: p.murrell at auckland.ac.nz (Paul Murrell)
Date: Tue, 21 Jun 2005 15:18:34 +1200
Subject: [Rd] Revised scatter.smooth using xy.coords
References: <14309.170.54.59.167.1115053647.squirrel@170.54.59.167>
Message-ID: <42B7870A.8050206@stat.auckland.ac.nz>

Hi

Thanks for these suggestions Kevin.

These are now in the development version of R.

Paul


kwright at eskimo.com wrote:
> This started when I discovered that scatter.smooth (R 2.1.0) has an
> undocumented ability to use a formula as the first argument.  Then I
> discovered the xy.coords function, which seems like a natural fit and a
> way to unify scatter.smooth with other plotting functions, so I offer here
> a revised version of scatter.smooth that uses the xy.coords function.
> 
> 
> scatter.smooth <- function (x, y=NULL, span = 2/3, degree = 1,
>                             family = c("symmetric", "gaussian"),
>                             xlab = NULL,
>                             ylab = NULL,
>                             ylim = range(y, prediction$y, na.rm = TRUE),
>                             evaluation = 50, ...) {
>   xlabel <- if (!missing(x))
>     deparse(substitute(x))
>   ylabel <- if (!missing(y))
>     deparse(substitute(y))
>   xy <- xy.coords(x, y, xlabel, ylabel)
> 
>   x <- xy$x
>   y <- xy$y
>   xlab <- if(is.null(xlab)) xy$xlab
>   else xlab
>   ylab <- if(is.null(ylab)) xy$ylab
>   else ylab
> 
>   #  if (inherits(x, "formula")) {
>   #    if (length(x) < 3)
>   #      stop("need response in formula")
>   #    thiscall <- match.call()
>   #    thiscall$x <- x[[3]]
>   #    thiscall$y <- x[[2]]
>   #    return(invisible(eval(thiscall, sys.parent())))
>   #  }
>   prediction <- loess.smooth(x, y, span, degree, family, evaluation)
>   plot(x, y, ylim = ylim, xlab = xlab, ylab = ylab, ...)
>   lines(prediction)
>   invisible()
> }
> 
> 1. I commented out some existing code and my revisions appear before the
> commented block.
> 
> 2. The argument list has changed slightly.  The original arguments were:
> y
> xlab=deparse(substitute(x))
> ylab=deparse(substitute(y))
> 
> 3.  With the suggested change, the following examples now work as one
> would expect
> 
> attach(cars)
> scatter.smooth(speed,dist,main="dist,speed")
> scatter.smooth(speed,dist,main="dist,speed",xlab="",ylab="")
> scatter.smooth(cars,main="cars")
> scatter.smooth(cars,main="cars",xlab="Speed",ylab="Distance")
> scatter.smooth(dist~speed,main="dist~speed")
> scatter.smooth(dist~speed,main="dist~speed",xlab="")
> scatter.smooth(dist~speed,main="dist~speed",ylab="")
> 
> 4. If this revision is accepted, the help page for scatter.smooth should
> probably be updated, perhaps using the same definition of the x,y
> arguments in the plot.default help page.
> 
> Best,
> 
> Kevin Wright
> 
> ______________________________________________
> R-devel at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/



[Rd] Revised scatter.smooth using xy.coords
Paul Murrell