| TreeNumber | R Documentation |
Functions converting between phylogenetic trees and their unique decimal representation, based on a concept by John Tromp, employed in \insertCiteLi1996TreeTools.
as.TreeNumber(x, ...)
## S3 method for class 'phylo'
as.TreeNumber(x, ...)
## S3 method for class 'multiPhylo'
as.TreeNumber(x, ...)
## S3 method for class 'character'
as.TreeNumber(x, nTip, tipLabels = TipLabels(nTip), ...)
## S3 method for class 'TreeNumber'
as.TreeNumber(x, ...)
## S3 method for class 'MixedBase'
as.TreeNumber(x, ...)
## S3 method for class 'TreeNumber'
as.MixedBase(x, ...)
## S3 method for class 'integer64'
as.MixedBase(x, tipLabels = NULL, ...)
## S3 method for class 'numeric'
as.MixedBase(x, tipLabels = NULL, ...)
## S3 method for class 'numeric'
as.phylo(x, nTip = attr(x, "nTip"), tipLabels = attr(x, "tip.label"), ...)
## S3 method for class 'TreeNumber'
as.phylo(x, nTip = attr(x, "nTip"), tipLabels = attr(x, "tip.label"), ...)
as.MixedBase(x, ...)
## S3 method for class 'MixedBase'
as.MixedBase(x, ...)
## S3 method for class 'phylo'
as.MixedBase(x, ...)
## S3 method for class 'multiPhylo'
as.MixedBase(x, ...)
## S3 method for class 'MixedBase'
as.phylo(x, nTip = attr(x, "nTip"), tipLabels = attr(x, "tip.label"), ...)
x |
Integer identifying the tree (see details). |
... |
Additional parameters for consistency with S3 methods (unused). |
nTip |
Integer specifying number of leaves in the tree. |
tipLabels |
Character vector listing the labels assigned to each tip
in a tree, perhaps obtained using |
There are NUnrooted(n) unrooted trees with n leaves.
As such, each n-leaf tree can be uniquely identified by a non-negative
integer x < NUnrooted(n).
This integer can be converted by a tree by treating it as a mixed-base number, with bases 1, 3, 5, 7, … (2 n - 5).
Each digit of this mixed base number corresponds to a leaf, and determines the location on a growing tree to which that leaf should be added.
We start with a two-leaf tree, and treat 0 as the origin of the tree.
0 ---- 1
We add leaf 2 by breaking an edge and inserting a node (numbered
2 + nTip - 1).
In this example, we'll work up to a six-leaf tree; this node will be numbered
2 + 6 - 1 = 7.
There is only one edge on which leaf 2 can be added. Let's add node 7 and
leaf 2:
0 ---- 7 ---- 1
|
|
2
There are now three edges on which leaf 3 can be added. Our options are:
Option 0: the edge leading to 1;
Option 1: the edge leading to 2;
Option 2: the edge leading to 7.
If we select option 1, we produce:
0 ---- 7 ---- 1
|
|
8 ---- 2
|
|
3
1 is now the final digit of our mixed-base number.
There are five places to add leaf 4:
Option 0: the edge leading to 1;
Option 1: the edge leading to 2;
Option 2: the edge leading to 3;
Option 3: the edge leading to 7;
Option 4: the edge leading to 8.
If we chose option 3, then 3 would be the penultimate digit of our
mixed-base number.
If we chose option 0 for the next two additions, we could specify this tree with the mixed-base number 0021. We can convert this into decimal:
0 × (1 × 3 × 5 × 9) +
0 × (1 × 3 × 5) +
3 × (1 × 3) +
1 × (1)
= 10
Note that the hyperexponential nature of tree space means that there are >
2^64 unique 20-leaf trees. As a TreeNumber is a 64-bit integer,
only trees with at most 19 leaves can be accommodated.
as.TreeNumber() returns an object of class TreeNumber,
which comprises a numeric vector, whose elements represent successive
nine-digit chunks of the decimal integer corresponding to the tree topology
(in big endian order). The TreeNumber object has attributes
nTip and tip.label. If x is a list of trees or a multiPhylo object,
then as.TreeNumber() returns a corresponding list of TreeNumber objects.
as.phylo.numeric() returns a tree of class phylo.
Martin R. Smith (martin.smith@durham.ac.uk)
Describe the shape of a tree topology, independent of leaf labels:
TreeShape()
Other tree generation functions:
ConstrainedNJ(),
GenerateTree,
NJTree(),
TrivialTree
Other 'TreeNumber' utilities:
is.TreeNumber(),
print.TreeNumber()
tree <- as.phylo(10, nTip = 6)
plot(tree)
as.TreeNumber(tree)
# Larger trees:
as.TreeNumber(BalancedTree(19))
# If > 9 digits, represent the tree number as a string.
treeNumber <- as.TreeNumber("1234567890123", nTip = 14)
tree <- as.phylo(treeNumber)
as.phylo(0:2, nTip = 6, tipLabels = letters[1:6])
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.