Learn R Programming

ape (version 5.5)

howmanytrees: Calculate Numbers of Phylogenetic Trees

Description

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\).

Usage

howmanytrees(n, rooted = TRUE, binary = TRUE,
             labeled = TRUE, detail = FALSE)
LargeNumber(a, b)
# S3 method for LargeNumber
print(x, ...)

Arguments

n

a positive numeric integer giving the number of tips.

rooted

a logical indicating whether the trees are rooted (default is TRUE).

binary

a logical indicating whether the trees are bifurcating (default is TRUE).

labeled

a logical indicating whether the trees have tips labeled (default is TRUE).

detail

a logical indicating whether the eventual intermediate calculations should be returned (default is FALSE). This applies only for the multifurcating trees, and the bifurcating, rooted, unlabeled trees (aka tree shapes).

a, b

two numbers.

x

an object of class "LargeNumber".

(unused).

Value

a single numeric value, an object of class "LargeNumber", or in the case where detail = TRUE is used, a named vector or matrix.

Details

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.

References

Felsenstein, J. (2004) Inferring Phylogenies. Sunderland: Sinauer Associates.

Examples

Run this code
# NOT RUN {
### 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)
# }

Run the code above in your browser using DataLab