`TBR`

performs a single random TBR iteration.

```
TBR(tree, edgeToBreak = NULL, mergeEdges = NULL)
TBRMoves(tree, edgeToBreak = integer(0))
# S3 method for phylo
TBRMoves(tree, edgeToBreak = integer(0))
# S3 method for matrix
TBRMoves(tree, edgeToBreak = integer(0))
TBRSwap(
parent,
child,
nEdge = length(parent),
edgeToBreak = NULL,
mergeEdges = NULL
)
RootedTBR(tree, edgeToBreak = NULL, mergeEdges = NULL)
RootedTBRSwap(
parent,
child,
nEdge = length(parent),
edgeToBreak = NULL,
mergeEdges = NULL
)
```

## Arguments

- tree
A bifurcating tree of class `phylo`

, with all nodes resolved;

- edgeToBreak
(optional) integer specifying the index of an edge to bisect/prune,
generated randomly if not specified.
Alternatively, set to `-1`

to return a complete list
of all trees one step from the input tree.

- mergeEdges
(optional) vector of length 1 or 2, listing edge(s) to be joined:
In SPR, this is where the pruned subtree will be reconnected.
In TBR, these edges will be reconnected (so must be on opposite
sides of `edgeToBreak`

); if only a single edge is specified,
the second will be chosen at random

- 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) Number of edges.

## Value

This function returns a tree in `phyDat`

format that has undergone one TBR iteration.
`TBRMoves()`

returns a `multiPhylo`

object listing all trees one
TBR 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

## Functions

`TBRSwap`

: faster version that takes and returns parent and child
parameters

`RootedTBR`

: Perform TBR rearrangement, retaining position of root

`RootedTBRSwap`

: faster version that takes and returns parent and child parameters

## References

The TBR algorithm is summarized in
Felsenstein J (2004).
*Inferring phylogenies*.
Sinauer Associates, Sunderland, Massachusetts.

## See also

`RootedTBR()`

: useful when the position of the root node should be retained.

Other tree rearrangement functions:
`NNI()`

,
`SPR()`

## Examples

```
{
library('ape')
tree <- rtree(20, br=NULL)
TBR(tree)
}
#>
#> Phylogenetic tree with 20 tips and 19 internal nodes.
#>
#> Tip labels:
#> t5, t1, t7, t4, t2, t6, ...
#>
#> Rooted; no branch lengths.
```