Internal Reordering of Trees
reorder
changes the internal structure of a phylogeny stored as
an object of class "phylo"
. The tree returned is the same than
the one input, but the ordering of the edges could be different.
cladewise
and postorder
are convenience functions to
return only the indices of the reordered edge matrices (see examples).
## S3 method for class 'phylo' reorder(x, order = "cladewise", index.only = FALSE, ...) ## S3 method for class 'multiPhylo' reorder(x, order = "cladewise", ...) cladewise(x) postorder(x)
x |
an object of class |
order |
a character string: either |
index.only |
should the function return only the ordered indices of the rows of the edge matrix? |
... |
further arguments passed to or from other methods. |
Because in a tree coded as an object of class "phylo"
each
branch is represented by a row in the element ‘edge’, there is an
arbitrary choice for the ordering of these rows. reorder
allows
to reorder these rows according to three rules: in the
"cladewise"
order each clade is formed by a series of
contiguous rows. In the "postorder"
order, the rows are
arranged so that computations following pruning-like algorithm the
tree (or postorder tree traversal) can be done by descending along
these rows (conversely, a preorder tree traversal can be performed by
moving from the last to the first row). The "pruningwise"
order
is an alternative “pruning” order which is actually a bottom-up
traversal order (Valiente 2002). (This third choice might be removed
in the future as it merely duplicates the second one which is more
efficient.) The possible multichotomies and branch lengths are preserved.
Note that for a given order, there are several possible orderings of the rows of ‘edge’.
an object of class "phylo"
(with the attribute "order"
set accordingly), or a numeric vector if index.only = TRUE
; if
x
is of class "multiPhylo"
, then an object of the same
class.
Emmanuel Paradis
Valiente, G. (2002) Algorithms on Trees and Graphs. New York: Springer.
data(bird.families) tr <- reorder(bird.families, "postorder") all.equal(bird.families, tr) # uses all.equal.phylo actually all.equal.list(bird.families, tr) # bypasses the generic ## get the number of descendants for each tip or node: nr_desc <- function(x) { res <- numeric(max(x$edge)) res[1:Ntip(x)] <- 1L for (i in postorder(x)) { tmp <- x$edge[i,1] res[tmp] <- res[tmp] + res[x$edge[i, 2]] } res } ## apply it to a random tree: tree <- rtree(10) plot(tree, show.tip.label = FALSE) tiplabels() nodelabels() nr_desc(tree)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.