]> git.donarmstrong.com Git - ape.git/blobdiff - R/reorder.phylo.R
changes in reorder(, "cladewise")
[ape.git] / R / reorder.phylo.R
index 38a7da2e3158a6e516869941ef877a5ff64705ee..c7e11d3bb5c4816d4dadccaf9fc69935060fd4ed 100644 (file)
@@ -1,8 +1,8 @@
-## reorder.phylo.R (2007-06-16)
+## reorder.phylo.R (2012-08-17)
 
 ##   Internal Reordering of Trees
 
-## Copyright 2006-2007 Emmanuel Paradis
+## Copyright 2006-2012 Emmanuel Paradis
 
 ## This file is part of the R-package `ape'.
 ## See the file ../COPYING for licensing issues.
@@ -11,20 +11,25 @@ reorder.phylo <- function(x, order = "cladewise", ...)
 {
     order <- match.arg(order, c("cladewise", "pruningwise"))
     if (!is.null(attr(x, "order")))
-      if (attr(x, "order") == order) return(x)
-    nb.tip <- length(x$tip.label)
+        if (attr(x, "order") == order) return(x)
     nb.node <- x$Nnode
+    if (nb.node == 1) return(x)
+    nb.tip <- length(x$tip.label)
     nb.edge <- dim(x$edge)[1]
-    neworder <- if (order == "cladewise")
-      .C("neworder_cladewise", as.integer(nb.tip),
-         as.integer(x$edge[, 1]), as.integer(x$edge[, 2]),
-         as.integer(nb.edge), integer(nb.edge),
-         PACKAGE = "ape")[[5]]
-    else
-      .C("neworder_pruningwise", as.integer(nb.tip),
-         as.integer(nb.node), as.integer(x$edge[, 1]),
-         as.integer(x$edge[, 2]), as.integer(nb.edge),
-         integer(nb.edge), PACKAGE = "ape")[[6]]
+    if (order == "cladewise") {
+        neworder <-
+            .C("neworder_cladewise", as.integer(nb.tip),
+               as.integer(x$edge[, 1]), as.integer(x$edge[, 2]),
+               as.integer(nb.edge), integer(nb.edge),
+               DUP = FALSE, NAOK = TRUE, PACKAGE = "ape")[[5]]
+    } else {
+        ##node.degree <- tabulate(x$edge[, 1])
+        neworder <-
+            .C("neworder_pruningwise", as.integer(nb.tip),
+               as.integer(nb.node), as.integer(x$edge[, 1]),
+               as.integer(x$edge[, 2]), as.integer(nb.edge),
+               integer(nb.edge), PACKAGE = "ape")[[6]]
+    }
     x$edge <- x$edge[neworder, ]
     if (!is.null(x$edge.length))
       x$edge.length <- x$edge.length[neworder]