[R] RE: How to write an S4 method for sum or a Summary generic

Swinton, Jonathan Jonathan.Swinton at astrazeneca.com
Fri May 14 18:03:01 CEST 2004


I asked a couple of weeks ago about how to write an S4 method for sum, or
another member of the Summary group generics. This prompted an informed and
somewhat over my head email discussion off list, but for the benefit of
posterity the current answer is

1) Redefine the generic for sum as follows:
-----------
setGeneric("sum", function(x, ..., na.rm = FALSE)
standardGeneric("sum"),group="Summary", 
   useAsDefault = function(x, ..., na.rm = FALSE) .Internal(sum(x, ...,na.rm
= na.rm)))
-----------
2) This allows the following to work as expected 
----------
setClass("Foo", representation(a="numeric"))
aFoo <- new("Foo", a=c(1,NA))

setMethod("Summary", "Foo",
          function(x, ..., na.rm = FALSE) {
              cat("Foo method\n")
              callGeneric(x at a, ..., na.rm = na.rm)
          })

sum(aFoo)
sum(aFoo, na.rm=TRUE)
----------

Without step 1)  this does not work in R 1.9.0 but is reported to work in
S-Plus 6.2.

3) Repeat for each other Summary group generic you wish to write a method
for. 

Thanks to Brian Ripley and John Chambers for taking the time on this.


Jonathan Swinton, Statistical Scientist, Computational Biology, Pathways,
Global Sciences and Information, AstraZeneca, Alderley Park, Cheshire SK10
4TG UK




More information about the R-help mailing list