[R] How to find S4 generics?

Thomas Lumley tlumley at u.washington.edu
Thu Jul 20 00:05:16 CEST 2006


On Wed, 19 Jul 2006, Spencer Graves wrote:
> 	  Am I correct then that the 'methods' function could, at least
> theoretically, be revised so methods(class=...) could identify both S3
> and S4 methods (ignoring inheritance, as it does now, I believe)?
>

Here is a function to find methods for a formal class. It returns a list 
with elements corresponding to a generic, and each element is a list of 
strings showing all the signatures that contain any of the specified 
classes.

If super=TRUE it looks at all superclasses, if ANY=TRUE it also returns 
methods for ANY class.

If you have lme4 loaded, try
   methods4("lmer"
   methods4("ddiMatrix")
   methods4("ddiMatrix",super=TRUE)

 	-thomas

methods4<-function(classes, super=FALSE, ANY=FALSE){
   if (super) classes<-unlist(sapply(classes, function(cl) getAllSuperClasses(getClass(cl))))
   if (ANY) classes<-c(classes,"ANY")
   gens<-allGenerics()@.Data
   sigs<-lapply(gens, function(g) linearizeMlist(getMethods(g))@classes)
   names(sigs)<-gens at .Data
   sigs<-lapply(sigs, function(gen){ gen[unlist(sapply(gen, function(sig) any(sig %in% classes)))]})
   sigs[sapply(sigs,length)>0]
}


Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle



More information about the R-help mailing list