[R] getting panel.loess to use updated version of loess.smooth
Benjamin Tyner
btyner at gmail.com
Tue Jul 12 20:53:55 CEST 2005
A quick workaround, kudos to Deepayan Sarkar, is to use grid:: for both
grid.lines AND gpar in panel.loess:
grid::grid.lines(x = smooth$x, y = smooth$y, default.units =
"native",
gp = grid::gpar(col = col.line, lty = lty, lwd = lwd))
Then write a new panel function as you suggest (though the name can be
the same), and to export this panel function in the package NAMESPACE
file. loess.smooth and simpleLoess are separate functions, sorry if I
didn't make that clear.
This works well enough that I don't require anything fancier for now.
Thanks!
Ben
Sundar Dorai-Raj wrote:
>
>
> Benjamin Tyner wrote:
>
>> I'm updating the loess routines to allow for, among other things,
>> arbitrary local polynomial degree and number of predictors. For now,
>> I've given the updated package its own namespace. The trouble is,
>> panel.loess still calls the original code in package:stats instead of
>> the new loess package, regardless of whether package:loess or
>> package:lattice comes first in the search list. If I export
>> panel.loess from the new package, then it can't see grid.lines anymore.
>>
>> I've tried using fixInNamespace to change the loess.smooth in
>> package:stats to point to the updated simpleLoess, but it is locked.
>> At http://tolstoy.newcastle.edu.au/R/help/04/05/0428.html it was
>> suggested to write a new panel function. However I still need to be
>> able to access grid.lines, and getFromNamespace("grid.lines","grid")
>> is not the way to do this.
>>
>> Any ideas? This seems simple but I'm stumped.
>>
>> Thanks,
>> Ben
>>
>
> Can you show us what you tried? It seems as simple as defining a new
> panel function:
>
> panel.loess2 <- function (x, y, span = 2/3, degree = 1,
> family = c("symmetric", "gaussian"),
> evaluation = 50, lwd = add.line$lwd,
> lty = add.line$lty, col,
> col.line = add.line$col, ...) {
> x <- as.numeric(x)
> y <- as.numeric(y)
> if (length(x) > 0) {
> if (!missing(col)) {
> if (missing(col.line))
> col.line <- col
> }
> add.line <- trellis.par.get("add.line")
> #smooth <- loess.smooth(x, y, span = span, family = family,
> # degree = degree, evaluation = evaluation)
> smooth <- simpleLoess(x, y, span = span, family = family,
> degree = degree, evaluation = evaluation)
> grid.lines(x = smooth$x, y = smooth$y, default.units = "native",
> gp = gpar(col = col.line, lty = lty, lwd = lwd))
> }
> }
>
>
> --sundar
More information about the R-help
mailing list