Re: [R] accessing source code in R packages

From: Spencer Graves <spencer.graves_at_pdf.com>
Date: Thu 22 Sep 2005 - 22:55:12 EST

Dear Prof. Ripley: Thanks. This looks like a very useful summary. spencer graves

Prof Brian Ripley wrote:

> The original reply was deliberately (I guess) vague. (I've removed the
> history, as attributions had already been removed, in violation of
> copyright law. If you cite someone, you MUST credit the author.)
>
> Sometimes a little knowledge is a dangerous thing, and we have had a
> number of partially true answers.
>
> Spreading confusion between the S4 classes of the 'methods' package and
> the (sometimes called S3) classes of base R is also dangerous. The R
> documentation refers to S3 methods and classes unless otherwise stated
> (and in the methods package documentation). Please follow that lead.
>
> On Thu, 22 Sep 2005, Spencer Graves wrote:
>

>>       Is there general documentation on a procedure to follow to:
>>
>>       (a) Find what methods are available for a particular class of 
>> objects?

>
>
> ?methods, unless you mean an S4 class.
>
> Be careful here: methods `for a particular class' are not all that might
> be dispatched, as methods for classes the object inherits from may also
> be used. Thus "lm" methods may be invoked for "glm" objects, and you
> may need to call methods() for all the classes the object inherits from.
>
>>       (b) Find what classes of objects have methods defined for a 
>> partilar
>> generic function?

>
>
> ?methods, unless you mean S4 classes (and that help page leads you to the
> right place for those).
>
>>       (c) Get the code that's actually used?

>
>
> getAnywhere() on the asterisked results of (a) or (b).
>
> For a specific generic and a specific class, getS3method().
>
> [There is a potential gap here as the "bar" method for class "foo" need
> not be called foo.bar(). So guessing the name may not work, but
> getS3method("foo", "bar") will. AFAIK there are no live examples of this.]
>
>>       For example, I recently needed to access numbers associated with an
>> object of class "lmer".  Sundar suggested I use with 'getMethod("show",
>> "summary.lmer")'.  However, this doesn't work with the example below.

>
>
> (I think that was intended to refer to the default method for princomp,
> which is not an S4 generic in base R.
>
>> methods("princomp")

>
> [1] princomp.default* princomp.formula*
>
> Non-visible functions are asterisked
>
>> getAnywhere("princomp.default")    # works
>> getS3Method("princomp", "default") # works
>> showMethods("princomp")

>
>
> Function "princomp":
> <not a generic function>
> )
>
> show() is an S4 generic, not an S3 generic. ?methods points you to how
> to explore S4 generics.
>
>> library(lme4)

>
> ... (and drink some coffee while you wait)
>
>> methods(show)

>
> no methods were found
> Warning message:
> function 'show' appears not to be generic in: methods(show)
>
>> showMethods("show")

>
>
> Function "show":
> object = "ANY"
> object = "traceable"
> object = "ObjectsWithPackage"
> object = "MethodDefinition"
> object = "MethodWithNext"
> object = "genericFunction"
> object = "classRepresentation"
> object = "ddenseMatrix"
> object = "Matrix"
> object = "lmer"
> object = "summary.lmer"
> object = "VarCorr"
> object = "sparseMatrix"
> object = "lmList"
>
>> selectMethod("show", "summary.lmer")

>
> Method Definition:
>
> function (object) ...
>
> Here getMethod() will also work, but selectMethod() is more likely to
> find `the code that's actually used'.
>
>
-- 
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA

spencer.graves@pdf.com
www.pdf.com <http://www.pdf.com>
Tel:  408-938-4420
Fax: 408-280-7915

______________________________________________
R-help@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
Received on Thu Sep 22 23:12:14 2005

This archive was generated by hypermail 2.1.8 : Sun 23 Oct 2005 - 17:38:40 EST