1 ## reorder.phylo.R (2012-09-03)
3 ## Internal Reordering of Trees
5 ## Copyright 2006-2012 Emmanuel Paradis
7 ## This file is part of the R-package `ape'.
8 ## See the file ../COPYING for licensing issues.
10 reorder.phylo <- function(x, order = "cladewise", index.only = FALSE, ...)
12 ORDER <- c("cladewise", "postorder", "pruningwise")
13 io <- pmatch(order, ORDER)
14 if (is.na(io)) stop("ambiguous order")
16 if (!is.null(attr(x, "order")))
17 if (attr(x, "order") == order) return(x)
19 if (nb.node == 1) return(x)
20 nb.tip <- length(x$tip.label)
21 nb.edge <- dim(x$edge)[1]
25 .C("neworder_pruningwise", as.integer(nb.tip),
26 as.integer(nb.node), as.integer(x$edge[, 1]),
27 as.integer(x$edge[, 2]), as.integer(nb.edge),
28 integer(nb.edge), PACKAGE = "ape")[[6]]
31 .C("neworder_phylo", as.integer(nb.tip),
32 as.integer(x$edge[, 1]), as.integer(x$edge[, 2]),
33 as.integer(nb.edge), integer(nb.edge), io,
34 DUP = FALSE, NAOK = TRUE, PACKAGE = "ape")[[5]]
36 if (index.only) return(neworder)
37 x$edge <- x$edge[neworder, ]
38 if (!is.null(x$edge.length))
39 x$edge.length <- x$edge.length[neworder]
40 attr(x, "order") <- order