# [Rd] Methods package is now attached by default

Thomas Lumley tlumley@u.washington.edu
Tue Jan 21 23:51:02 2003

```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

```