1 ## collapse.singles.R (2013-01-16)
3 ## Collapse "Single" Nodes
5 ## Copyright 2006 Ben Bolker, 2013 Klaus Schliep
7 ## This file is part of the R-package `ape'.
8 ## See the file ../COPYING for licensing issues.
10 collapse.singles <- function(tree)
12 tree <- reorder(tree) # added by Klaus
13 elen <- tree$edge.length
15 ## added by Elizabeth Purdom (2008-06-19):
16 node.lab <- tree$node.label
18 ntip <- length(tree$tip.label)
20 ## Added by Klaus (2013-01-16):
21 tx <- tabulate(xmat[, 1])
22 singles <- which(tx == 1)
23 if (length(singles) > 0) {
24 prev.nodes <- match(singles, xmat[,2])
25 next.nodes <- match(singles, xmat[,1])
26 for(j in length(singles):1) {
28 xmat[prev.nodes[j], 2] <- xmat[next.nodes[j], 2]
29 elen[prev.nodes[j]] <- elen[prev.nodes[j]] + elen[next.nodes[j]]
31 xmat <- xmat[-next.nodes,]
32 elen <- elen[-next.nodes]
33 if (!is.null(node.lab)) node.lab <- node.lab[-c(singles - ntip)]
34 nnode = nnode - as.integer(length(singles))
35 tmp = integer(max(xmat))
36 tmp[sort(unique(as.vector(xmat)))] = as.integer(c(1:(ntip+nnode)))
41 tree$edge.length <- elen
42 ## added by Elizabeth Purdom (2008-06-19):
43 tree$node.label <- node.lab