bind.tree | R Documentation |
This function binds together two phylogenetic trees to give a single
object of class "phylo"
.
bind.tree(x, y, where = "root", position = 0, interactive = FALSE)
x + y
x |
an object of class |
y |
an object of class |
where |
an integer giving the number of the node or tip of the
tree |
position |
a numeric value giving the position from the tip or
node given by |
interactive |
if |
The argument x
can be seen as the receptor tree, whereas
y
is the donor tree. The root of y
is then grafted on a
location of x
specified by where
and, possibly,
position
. If y
has a root edge, this is added as in
internal branch in the resulting tree.
x + y
is a shortcut for:
bind.tree(x, y, position = if (is.null(x$root.edge)) 0 else x$root.edge)
If only one of the trees has no branch length, the branch lengths of the other one are ignored with a warning.
If one (or both) of the trees has no branch length, it is possible to
specify a value of 'position' to graft 'y' below the node of 'x'
specified by 'where'. In this case, the exact value of 'position' is
not important as long as it is greater than zero. The new node will be
multichotomous if 'y' has no root edge. This can be solved by giving
an arbitrary root edge to 'y' beforehand (e.g., y$root.edge <-
1
): it will be deleted during the binding operation.
an object of class "phylo"
.
Emmanuel Paradis
drop.tip
, root
### binds the two clades of bird orders
treefile1 <- tempfile("tree", fileext = ".tre")
treefile2 <- tempfile("tree", fileext = ".tre")
cat("((Struthioniformes:21.8,Tinamiformes:21.8):4.1,",
"((Craciformes:21.6,Galliformes:21.6):1.3,Anseriformes:22.9):3.0):2.1;",
file = treefile1, sep = "\n")
cat("(Turniciformes:27.0,(Piciformes:26.3,((Galbuliformes:24.4,",
"((Bucerotiformes:20.8,Upupiformes:20.8):2.6,",
"(Trogoniformes:22.1,Coraciiformes:22.1):1.3):1.0):0.6,",
"(Coliiformes:24.5,(Cuculiformes:23.7,(Psittaciformes:23.1,",
"(((Apodiformes:21.3,Trochiliformes:21.3):0.6,",
"(Musophagiformes:20.4,Strigiformes:20.4):1.5):0.6,",
"((Columbiformes:20.8,(Gruiformes:20.1,Ciconiiformes:20.1):0.7):0.8,",
"Passeriformes:21.6):0.9):0.6):0.6):0.8):0.5):1.3):0.7):1.0;",
file = treefile2, sep = "\n")
tree.bird1 <- read.tree(treefile1)
tree.bird2 <- read.tree(treefile2)
unlink(c(treefile1, treefile2)) # clean-up
(birds <- tree.bird1 + tree.bird2)
layout(matrix(c(1, 2, 3, 3), 2, 2))
plot(tree.bird1)
plot(tree.bird2)
plot(birds)
### examples with random trees
x <- rtree(4, tip.label = LETTERS[1:4])
y <- rtree(4, tip.label = LETTERS[5:8])
x <- makeNodeLabel(x, prefix = "x_")
y <- makeNodeLabel(y, prefix = "y_")
x$root.edge <- y$root.edge <- .2
z <- bind.tree(x, y, po=.2)
plot(y, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("y")
plot(x, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("x")
plot(z, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("z <- bind.tree(x, y, po=.2)")
## make sure the terminal branch length is long enough:
x$edge.length[x$edge[, 2] == 2] <- 0.2
z <- bind.tree(x, y, 2, .1)
plot(y, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("y")
plot(x, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("x")
plot(z, show.node.label = TRUE, font = 1, root.edge = TRUE)
title("z <- bind.tree(x, y, 2, .1)")
x <- rtree(50)
y <- rtree(50)
x$root.edge <- y$root.edge <- .2
z <- x + y
plot(y, show.tip.label = FALSE, root.edge = TRUE); axisPhylo()
title("y")
plot(x, show.tip.label = FALSE, root.edge = TRUE); axisPhylo()
title("x")
plot(z, show.tip.label = FALSE, root.edge = TRUE); axisPhylo()
title("z <- x + y")
layout(1)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.