On Fri, May 17, 2013 at 2:56 AM, Seth Myers <sjmyers3142@gmail.com> wrote:

> Let's say I would like to look inside the function corBrownian in library
> (ape).  When I type in the function name I get the following, which is not
> nearly the detail that goes into this function.  I am wondering how to
> begin cracking this function open (and others) so I can learn more about it
> and perhaps code my own corClass one day.  Thanks.
>
> > corBrownian
> function (value = 1, phy, form = ~1)
> {
>     if (!inherits(phy, "phylo"))
>         stop("object \"phy\" is not of class \"phylo\"")
>     attr(value, "formula") <- form
>     attr(value, "fixed") <- TRUE
>     attr(value, "tree") <- phy
>     class(value) <- c("corBrownian", "corPhyl", "corStruct")
>     value
> }
> <environment: namespace:ape>
>
>
Your premise is wrong! This is exactly all that goes into the corBrownian
function. All that it does is create a thing with some values and most
importantly, a set of class attributes.

 It's via that class attribute that your corBrownian objects get their
behaviour via _method_ functions.  If you download the source code for ape
from CRAN and have a look in PGLS.R you will see a bunch of functions such
as "Initialize.corPhyl" and "corMatrix.corBrownian" which are methods for
Initialize and corMatrix for corPhyl classes and corBrownian classes
respectively.

 So when you come to use one of these correlation structures, the calling
code doesn't care how the correlation structure computes its correlation
matrix, it just calls the corMatrix function and the object-oriented magic
calls the specific one for that specific class of model.

 So in ape, all the phylogenetic correlation classes are initialised with
Initialize.corPhyl and the Brownian one has corMatrix.corBrownian as the
method for computing its correlation matrix. You can see the source code
for these methods by typing their names on the R command line. Sometimes
methods aren't exported and aren't so easily visible on the command line,
leading to frustration. Download the source package for complete
satisfaction.

 The help for ?corClasses in the nlme package has a bit more help, but you
might do well to read the source code of how these methods are created in
the ape package, especially if you are going to be creating a variation on
these phylo-classes.

 Good luck. I tried and failed to write a new corClass for nlme a few years
back.

corBlimey.

Barry

	[[alternative HTML version deleted]]

