On Wed, 12 Mar 2003, Torsten Hothorn wrote: > > Hi, > > I'm a little bit confused about the class of integers (with yesterdays > r-devel): > > R> a <- 1:10 > R> class(a) > [1] "integer" > R> inherits(a, "integer") > [1] FALSE > R> data.class(a) > [1] "numeric" > R> is.numeric(a) > [1] TRUE > R> inherits(a, "numeric") > [1] FALSE
inherits needs updating .... > data.class is consistent with R-1.6.2, ok. The class of "a" is integer, > also ok. At first: why does "inherits" state that "a" is not of class > integer nor numeric? > And at second: one possible way of writing portable code (between 1.6.2 > and 1.7.0) for generics is using: > > foo <- function(y, ...) { > if(is.null(class(y))) > class(y) <- data.class(y) > UseMethod("foo", y, ...) > } > > foo.default <- function(y, ...) { > stop(paste("Do not know how to handle objects of class", class(y))) > } > > (the thread "[Rd] Methods package is now attached by default" around Jan > 20th discussed this) > > If I have > > foo.numeric <- function(y, ...) > ... > > this works with R-1.6.2 but since foo now dispatches on "class(y)" this > fails for integers with r-devel. Try foo <- function(y, ...) { if(is.null(oldClass(y))) oldClass(y) <- data.class(y) UseMethod("foo", y, ...) } or for 1.6.2 compatibility foo <- function(y, ...) { if(is.null(attr(y, "class"))) attr(y, "class") <- data.class(y) UseMethod("foo", y, ...) } (not actually tested). > Does this mean that I have to implement > foo.integer methods? No, but it is the cleanest route. -- 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 https://www.stat.math.ethz.ch/mailman/listinfo/r-devel