[R] accessing source code in R packages
Spencer Graves
spencer.graves at pdf.com
Thu Sep 22 14:55:12 CEST 2005
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 at pdf.com
www.pdf.com <http://www.pdf.com>
Tel: 408-938-4420
Fax: 408-280-7915
More information about the R-help
mailing list