[Rd] Revised scatter.smooth using xy.coords
kwright at eskimo.com
kwright at eskimo.com
Mon May 2 19:07:27 CEST 2005
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
More information about the R-devel
mailing list