reorder_tree_edges {castor} | R Documentation |
Given a rooted tree, this function reorders the rows in tree$edge
so that they are listed in preorder (root–>tips) or postorder (tips–>root) traversal.
reorder_tree_edges(tree, root_to_tips=TRUE, depth_first_search=TRUE, index_only=FALSE)
tree |
A rooted tree of class "phylo". The root is assumed to be the unique node with no incoming edge. |
root_to_tips |
Logical, specifying whether to sort edges in preorder traversal (root–>tips), rather than in postorder traversal (tips–>roots). |
depth_first_search |
Logical, specifying whether the traversal (or the reversed traversal, if |
index_only |
Whether the function should only return a vector listing the reordered row indices of the edge matrix, rather than a modified tree. |
This function does not change the tree structure, nor does it affect tip/node indices and names. It merely changes the order in which edges are listed in the matrix tree$edge
, so that edges are listed in preorder or postorder traversal. Preorder traversal guarantees that each edge is listed before any of its descending edges. Likewise, postorder guarantees that each edge is listed after any of its descending edges.
With options root_to_tips=TRUE
and depth_first_search=TRUE
, this function is analogous to the function reorder
in the ape
package with option order="cladewise"
.
The tree can include multifurcations (nodes with more than 2 children) as well as monofurcations (nodes with 1 child). This function has asymptotic time complexity O(Nedges).
If index_only==FALSE
, a tree object of class "phylo", with the rows in edge
reordered such that they are listed in direction root–>tips (if root_to_tips==TRUE
) or tips–>root. The vector tree$edge.length
will also be updated in correspondence. Tip and node indices and names remain unchanged.
If index_only=TRUE
, an integer vector (X) of size Nedges, listing the reordered row indices of tree$edge
, i.e. such that tree$edge[X,]
would be the reordered edge matrix.
Stilianos Louca
get_tree_traversal_root_to_tips
## Not run: # generate a random tree tree = generate_random_tree(list(birth_rate_factor=1), max_tips=100)$tree # get new tree with reordered edges postorder_tree = reorder_tree_edges(tree, root_to_tips=FALSE) ## End(Not run)