# [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