[R] showMethods()! Re: How to find S4 generics?
Martin Maechler
maechler at stat.math.ethz.ch
Thu Jul 20 09:55:22 CEST 2006
>>>>> "SpG" == Spencer Graves <spencer.graves at pdf.com>
>>>>> on Wed, 19 Jul 2006 15:23:58 -0700 writes:
SpG> Hi, Thomas: Thanks very much. I haven't tried it yet,
SpG> but it looks very useful. Best Wishes, Spencer Graves
Hmm, ?methods has been containing for a while
methods> Note:
methods>
methods> This scheme is called _S3_ (S version 3). For new projects, it is
methods> recommended to use the more flexible and robust _S4_ scheme
methods> provided in the 'methods' package. Functions can have both S3 and
methods> S4 methods, and function 'showMethods' will list the S4 methods
methods> (possibly none).
So I wonder why nowbody mentioned the official
showMethods()
(or are you all not reading the help pages ;-\) )
It does not always return / print what I want exactly, and in
the past, at one point I put some effort to make its output more
customizable.
I didn't put that effort to the end (*)
but for the present case
showMethods(class = "ddiMatrix", where = "package:Matrix")
at least is pretty useful.
(*) I think I had added the 'showEmpty = TRUE' argument
where the current documentation says
showM> showEmpty: logical indicating if methods with empty
showM> method lists should be shown at all.
showM> Note that 'FALSE' is _not yet implemented_.
and the non-implementation had a reason: implementation was
definitely much less simple than I had hoped ...
Martin
SpG> Thomas Lumley wrote:
>> 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
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do
>> read the posting guide
>> http://www.R-project.org/posting-guide.html and provide
>> commented, minimal, self-contained, reproducible code.
SpG> ______________________________________________
SpG> R-help at stat.math.ethz.ch mailing list
SpG> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do
SpG> read the posting guide
SpG> http://www.R-project.org/posting-guide.html and provide
SpG> commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list