-## rTrait.R (2011-04-02)
+## rTrait.R (2011-06-15)
## Trait Evolution
rTraitCont <-
function(phy, model = "BM", sigma = 0.1, alpha = 1, theta = 0,
- ancestor = FALSE, root.value = 0, linear = TRUE, ...)
+ ancestor = FALSE, root.value = 0, ...)
{
if (is.null(phy$edge.length))
stop("tree has no branch length")
if (length(theta) == 1) theta <- rep(theta, N)
else if (length(theta) != N)
stop("'theta' must have one or Nedge(phy) elements")
- if (!linear) model <- model + 1L
}
.C("rTraitCont", as.integer(model), as.integer(N),
as.integer(anc - 1L), as.integer(des - 1L), el,
rTraitMult <-
function(phy, model, p = 1, root.value = rep(0, p), ancestor = FALSE,
- as.factor = NULL, ...)
+ asFactor = NULL, trait.labels = paste("x", 1:p, sep = ""), ...)
{
phy <- reorder(phy, "pruningwise")
n <- length(phy$tip.label)
el <- phy$edge.length
if (is.null(el)) el <- numeric(N)
+ environment(model) <- environment() # to find 'p'
+
for (i in N:1) x[des[i], ] <- model(x[anc[i], ], el[i], ...)
if (ancestor) {
rownames(x) <- phy$tip.label
}
x <- as.data.frame(x)
- if (!is.null(as.factor)) {
- for (i in as.factor) {
+ names(x) <- trait.labels
+ if (!is.null(asFactor)) {
+ for (i in asFactor) {
y <- x[, i]
x[, i] <- factor(y, labels = LETTERS[1:length(unique(y))])
}