Perform one SPR rearrangement on a tree
Usage
SPR(tree, edgeToBreak = NULL, mergeEdge = NULL)
SPRMoves(tree, edgeToBreak = integer(0))
# S3 method for class 'phylo'
SPRMoves(tree, edgeToBreak = integer(0))
# S3 method for class 'matrix'
SPRMoves(tree, edgeToBreak = integer(0))
SPRSwap(
parent,
child,
nEdge = length(parent),
nNode = nEdge/2L,
edgeToBreak = NULL,
mergeEdge = NULL
)
RootedSPR(tree, edgeToBreak = NULL, mergeEdge = NULL)
RootedSPRSwap(
parent,
child,
nEdge = length(parent),
nNode = nEdge/2L,
edgeToBreak = NULL,
mergeEdge = NULL
)
Arguments
- tree
A tree of class
phylo
.- edgeToBreak
the index of an edge to bisect, generated randomly if not specified.
- mergeEdge
the index of an edge on which to merge the broken edge.
- parent
Integer vector corresponding to the first column of the edge matrix of a tree of class
phylo
, i.e.tree$edge[, 1]
.- child
Integer vector corresponding to the second column of the edge matrix of a tree of class
phylo
, i.e.tree$edge[, 2]
.- nEdge
(optional) integer specifying the number of edges of a tree of class
phylo
, i.e.dim(tree$edge)[1]
- nNode
(optional) Number of nodes.
Value
This function returns a tree in phyDat
format that has undergone one SPR iteration.
TBRMoves()
returns a list of all trees one SPR move away from
tree
, with edges and nodes in preorder, rooted on the first-labelled tip.
a list containing two elements, corresponding in turn to the rearranged parent and child parameters
a list containing two elements, corresponding in turn to the rearranged parent and child parameters
Details
Equivalent to kSPR()
in the phangorn package, but faster.
Note that rearrangements that only change the position of the root WILL be returned by
SPR
. If the position of the root is irrelevant (as in Fitch parsimony, for example)
then this function will occasionally return a functionally equivalent topology.
RootIrrelevantSPR
will search tree space more efficiently in these cases.
Branch lengths are not (yet) supported.
All nodes in a tree must be bifurcating; ape::collapse.singles and ape::multi2di may help.
Functions
SPRSwap()
: faster version that takes and returns parent and child parametersRootedSPR()
: Perform SPR rearrangement, retaining position of rootRootedSPRSwap()
: faster version that takes and returns parent and child parameters
References
The SPR algorithm is summarized in Felsenstein J (2004). Inferring phylogenies. Sinauer Associates, Sunderland, Massachusetts.
Examples
{
tree <- ape::rtree(20, br=FALSE)
SPR(tree)
}
#>
#> Phylogenetic tree with 20 tips and 19 internal nodes.
#>
#> Tip labels:
#> t12, t7, t19, t5, t6, t1, ...
#>
#> Rooted; includes branch lengths.