Calculate Numbers of Phylogenetic Trees
howmanytrees
calculates the number of possible phylogenetic
trees for a given number of tips.
LargeNumber
is a utility function to compute (approximately)
large numbers from the power a^b.
howmanytrees(n, rooted = TRUE, binary = TRUE, labeled = TRUE, detail = FALSE) LargeNumber(a, b) ## S3 method for class 'LargeNumber' print(x, ...)
n |
a positive numeric integer giving the number of tips. |
rooted |
a logical indicating whether the trees are rooted
(default is |
binary |
a logical indicating whether the trees are bifurcating
(default is |
labeled |
a logical indicating whether the trees have tips
labeled (default is |
detail |
a logical indicating whether the eventual intermediate
calculations should be returned (default is |
a, b |
two numbers. |
x |
an object of class |
... |
(unused). |
In the cases of labeled binary trees, the calculation is done directly
and a single numeric value is returned (or an object of class
"LargeNumber"
).
For multifurcating trees, and bifurcating, rooted, unlabeled trees,
the calculation is done iteratively for 1 to n
tips. Thus the
user can print all the intermediate values if detail = TRUE
, or
only a single value if detail = FALSE
(the default).
For multifurcating trees, if detail = TRUE
, a matrix is
returned with the number of tips as rows (named from 1
to
n
), and the number of nodes as columns (named from 1
to
n - 1
). For bifurcating, rooted, unlabeled trees, a vector is
returned with names equal to the number of tips (from 1
to
n
).
The number of unlabeled trees (aka tree shapes) can be computed only for the rooted binary cases.
Note that if an infinite value (Inf
) is returned this does not
mean that there is an infinite number of trees (this cannot be if the
number of tips is finite), but that the calculation is beyond the
limits of the computer. Only for the cases of rooted, binary, labeled
topologies an approximate number is returned in the form a
"LargeNumber"
object.
a single numeric value, an object of class "LargeNumber"
, or in
the case where detail = TRUE
is used, a named vector or
matrix.
Emmanuel Paradis
Felsenstein, J. (2004) Inferring Phylogenies. Sunderland: Sinauer Associates.
### Table 3.1 in Felsenstein 2004: for (i in c(1:20, 30, 40, 50)) cat(paste(i, howmanytrees(i), sep = "\t"), sep ="\n") ### Table 3.6: howmanytrees(8, binary = FALSE, detail = TRUE)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.