drop.tip
removes the terminal branches of a phylogenetic tree,
possibly removing the corresponding internal branches.
extract.clade
does the inverse operation: it keeps all the tips
from a given node, and deletes all the other tips.
1 2 3  drop.tip(phy, tip, trim.internal = TRUE, subtree = FALSE,
root.edge = 0, rooted = is.rooted(phy), interactive = FALSE)
extract.clade(phy, node, root.edge = 0, interactive = FALSE)

phy 
an object of class 
tip 
a vector of mode numeric or character specifying the tips to delete. 
trim.internal 
a logical specifying whether to delete the corresponding internal branches. 
subtree 
a logical specifying whether to output in the tree how many tips have been deleted and where. 
root.edge 
an integer giving the number of internal branches to
be used to build the new root edge. This has no effect if

rooted 
a logical indicating whether the tree must be treated as rooted or not. This allows to force the tree to be considered as unrooted (see examples). 
node 
a node number or label. 
interactive 
if 
The argument tip
can be either character or numeric. In the
first case, it gives the labels of the tips to be deleted; in the
second case the numbers of these labels in the vector
phy$tip.label
are given.
This also applies to node
, but if this argument is character
and the tree has no node label, this results in an error. If more than
one value is given with node
(i.e., a vector of length two or
more), only the first one is used with a warning.
If trim.internal = FALSE
, the new tips are given "NA"
as
labels, unless there are node labels in the tree in which case they
are used.
If subtree = TRUE
, the returned tree has one or several
terminal branches indicating how many tips have been removed (with a
label "[x_tips]"
). This is done for as many monophyletic groups
that have been deleted.
Note that subtree = TRUE
implies trim.internal = TRUE
.
To undestand how the option root.edge
works, see the examples
below.
an object of class "phylo"
.
Emmanuel Paradis
bind.tree
, root
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27  data(bird.families)
tip < c(
"Eopsaltriidae", "Acanthisittidae", "Pittidae", "Eurylaimidae",
"Philepittidae", "Tyrannidae", "Thamnophilidae", "Furnariidae",
"Formicariidae", "Conopophagidae", "Rhinocryptidae", "Climacteridae",
"Menuridae", "Ptilonorhynchidae", "Maluridae", "Meliphagidae",
"Pardalotidae", "Petroicidae", "Irenidae", "Orthonychidae",
"Pomatostomidae", "Laniidae", "Vireonidae", "Corvidae",
"Callaeatidae", "Picathartidae", "Bombycillidae", "Cinclidae",
"Muscicapidae", "Sturnidae", "Sittidae", "Certhiidae",
"Paridae", "Aegithalidae", "Hirundinidae", "Regulidae",
"Pycnonotidae", "Hypocoliidae", "Cisticolidae", "Zosteropidae",
"Sylviidae", "Alaudidae", "Nectariniidae", "Melanocharitidae",
"Paramythiidae","Passeridae", "Fringillidae")
plot(drop.tip(bird.families, tip))
plot(drop.tip(bird.families, tip, trim.internal = FALSE))
data(bird.orders)
plot(drop.tip(bird.orders, 6:23, subtree = TRUE))
plot(drop.tip(bird.orders, c(1:5, 20:23), subtree = TRUE))
plot(drop.tip(bird.orders, c(1:20, 23), subtree = TRUE))
plot(drop.tip(bird.orders, c(1:20, 23), subtree = TRUE, rooted = FALSE))
### Examples of the use of `root.edge'
tr < read.tree(text = "(A:1,(B:1,(C:1,(D:1,E:1):1):1):1):1;")
drop.tip(tr, c("A", "B"), root.edge = 0) # = (C:1,(D:1,E:1):1);
drop.tip(tr, c("A", "B"), root.edge = 1) # = (C:1,(D:1,E:1):1):1;
drop.tip(tr, c("A", "B"), root.edge = 2) # = (C:1,(D:1,E:1):1):2;
drop.tip(tr, c("A", "B"), root.edge = 3) # = (C:1,(D:1,E:1):1):3;

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
All documentation is copyright its authors; we didn't write any of that.