-## read.nexus.R (2009-10-27)
+## read.nexus.R (2009-11-21)
## Read Tree File in Nexus Format
.treeBuildWithTokens <- function(x)
{
+ ## remove potential node labels; see ?read.nexus for justification
+ node.label <- gsub("[:;].*$", "", strsplit(x, ")")[[1]][-1])
+ has.node.labels <- FALSE
+ if (any(node.label != "")) {
+ x <- gsub(")[^:]*:", "):", x)
+ x <- gsub(")[^:]*;", ");", x) # if there's no root edge
+ has.node.labels <- TRUE
+ }
phy <- .Call("treeBuildWithTokens", x, PACKAGE = "ape")
dim(phy[[1]]) <- c(length(phy[[1]])/2, 2)
- nms <- c("edge", "edge.length", "Nnode", "node.label")
- if (length(phy) == 5) nms <- c(nms, "root.edge")
+ nms <- c("edge", "edge.length", "Nnode", "root.edge")
+ if (length(phy) == 3) nms <- nms[-4]
names(phy) <- nms
- if (!sum(phy[[4]])) phy[[4]] <- NULL
+ if (has.node.labels) phy$node.label <- node.label
class(phy) <- "phylo"
phy
}