From ripley@stats.ox.ac.uk  Sat Jan 18 11:51:02 2003
From: ripley@stats.ox.ac.uk (Prof Brian D Ripley)
Date: Sat Jan 18 11:51:02 2003
Subject: [Rd] Methods package is now attached by default
In-Reply-To: <3E287D10.8692826A@research.bell-labs.com>
Message-ID: <Pine.WNT.4.44.0301181044480.1088-100000@petrel>

On Fri, 17 Jan 2003, John Chambers wrote:

> There are two main known differences from having methods attached:
>
> - the definition of class() changes, in particular no object ever has a
> NULL class.  If you have code that depends on test such as
> `if(is.null(class(x)))...', there may be problems.
>
> Usually code with those sort of tests is doing a workaround of the fact
> that not all objects had a class before.  The best solution is usually
> to ask what the code really wants to do.  If you do have to retain
> exactly the old behavior, one solution is to copy the version of class
> and class<- from the base package and use those (as baseClass and
> baseClass<-, e.g.) instead of class and class<-).

Here is one example, which makes the MASS scripts fail.

> library(MASS)
> corresp
function (x, ...)
{
    if (is.null(class(x)))
        class(x) <- data.class(x)
    UseMethod("corresp", x, ...)
}

That used to work with matrices, and dispatch to corresp.matrix.
Now a matrix has reported class "matrix" but dispatch occurs to
corresp.default.  The temporary fix is to remove the is.null condition.

That's quite a common construction, and I think I should expect UseMethod
to dispatch on the class class() reports.  So it looks to me as if
UseMethod needs to be altered to do so.

Brian

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] Methods package is now attached by default
Prof Brian D Ripley