]> git.donarmstrong.com Git - ape.git/blob - R/reorder.phylo.R
changes in reorder(, "cladewise")
[ape.git] / R / reorder.phylo.R
1 ## reorder.phylo.R (2012-08-17)
2
3 ##   Internal Reordering of Trees
4
5 ## Copyright 2006-2012 Emmanuel Paradis
6
7 ## This file is part of the R-package `ape'.
8 ## See the file ../COPYING for licensing issues.
9
10 reorder.phylo <- function(x, order = "cladewise", ...)
11 {
12     order <- match.arg(order, c("cladewise", "pruningwise"))
13     if (!is.null(attr(x, "order")))
14         if (attr(x, "order") == order) return(x)
15     nb.node <- x$Nnode
16     if (nb.node == 1) return(x)
17     nb.tip <- length(x$tip.label)
18     nb.edge <- dim(x$edge)[1]
19     if (order == "cladewise") {
20         neworder <-
21             .C("neworder_cladewise", as.integer(nb.tip),
22                as.integer(x$edge[, 1]), as.integer(x$edge[, 2]),
23                as.integer(nb.edge), integer(nb.edge),
24                DUP = FALSE, NAOK = TRUE, PACKAGE = "ape")[[5]]
25     } else {
26         ##node.degree <- tabulate(x$edge[, 1])
27         neworder <-
28             .C("neworder_pruningwise", as.integer(nb.tip),
29                as.integer(nb.node), as.integer(x$edge[, 1]),
30                as.integer(x$edge[, 2]), as.integer(nb.edge),
31                integer(nb.edge), PACKAGE = "ape")[[6]]
32     }
33     x$edge <- x$edge[neworder, ]
34     if (!is.null(x$edge.length))
35       x$edge.length <- x$edge.length[neworder]
36     attr(x, "order") <- order
37     x
38 }