From tlumley@u.washington.edu  Tue Jan 21 23:51:02 2003
From: tlumley@u.washington.edu (Thomas Lumley)
Date: Tue Jan 21 23:51:02 2003
Subject: [Rd] Methods package is now attached by default
In-Reply-To: <Pine.GSO.4.10.10301211356280.15902-100000@quetelet.stat.ucla.edu>
Message-ID: <Pine.A41.4.44.0301211438000.144514-100000@homer07.u.washington.edu>

On Tue, 21 Jan 2003, Roger Peng wrote:

> I was looking at the examples in the `optim' help page and I think one of
> them does not quite work.  In particular, this example:
>
> ## "wild" function , global minimum at about -15.81515
> fw <- function (x)
>      10*sin(0.3*x)*sin(1.3*x^2) + 0.00001*x^4 + 0.2*x+80
> plot(fw, -50, 50, n=1000, main = "optim() minimising `wild function'")
>
> While it executes, I think it produces the wrong plot.  The call to plot
> indicates that it should be plotted from x values of -50 to 50 but the
> resulting plot goes from 0 to 50.  However, if I call
>
> plot.function(fw, -50, 50, n = 1000,
>               main = "optim() minimising `wild function'")
>
>
> then that plot appears to be correct.  I figured this had something to do
> with the method dispatching on functions.

Not quite, because it doesn't use method dispatching -- it calls
plot.function explicitly.

I think it's a thinko in editing.  plot() went from
 plot<- function (x, ...)
 {
    if (is.null(attr(x, "class")) && is.function(x)) {
        if ("ylab" %in% names(list(...)))
            plot.function(x, ...)
        else plot.function(x, ylab = paste(deparse(substitute(x)),
            "(x)"), ...)
    }
    else UseMethod("plot")
 }
to
 plot<-function (x, y, ...)
{
    if (is.null(attr(x, "class")) && is.function(x)) {
        if ("ylab" %in% names(list(...)))
            plot.function(x, ...)
        else plot.function(x, ylab = paste(deparse(substitute(x)),
            "(x)"), ...)
    }
    else UseMethod("plot")
}

but the extra argument `y' never got passed down to plot.function. It
should be something like
function (x, y, ...)
{
    if (is.null(attr(x, "class")) && is.function(x)) {
        if ("ylab" %in% names(list(...)))
            plot.function(x,y, ...)
        else plot.function(x, y, ylab = paste(deparse(substitute(x)),
            "(x)"), ...)
    }
    else UseMethod("plot")
}


	-thomas



[Rd] Methods package is now attached by default
Thomas Lumley