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, [EMAIL PROTECTED] 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 ______________________________________________ [EMAIL PROTECTED] mailing list http://www.stat.math.ethz.ch/mailman/listinfo/r-devel