\name{c.phylo}
\alias{c.phylo}
\alias{c.multiPhylo}
\alias{.compressTipLabel}
\alias{.uncompressTipLabel}
\title{Building Lists of Trees}
\description{
These functions help to build lists of trees of class \code{"multiPhylo"}.
}
\usage{
\method{c}{phylo}(..., recursive = TRUE)
\method{c}{multiPhylo}(..., recursive = TRUE)
.compressTipLabel(x, ref = NULL)
.uncompressTipLabel(x)
}
\arguments{
\item{\dots}{one or several objects of class \code{"phylo"} and/or
\code{"multiPhylo"}.}
\item{recursive}{see details.}
\item{x}{an object of class \code{"phylo"} or \code{"multiPhylo"}.}
\item{ref}{an optional vector of mode character to constrain the order
of the tips. By default, the order from the first tree is used.}
}
\details{
These \code{c} methods check all the arguments, and return by default
a list of single trees unless some objects are not trees or lists of
trees, in which case \code{recursive} is switched to FALSE and a
warning message is given. If \code{recursive = FALSE}, the objects are
simply concatenated into a list. Before \pkg{ape} 4.0, \code{recursive}
was always set to FALSE.
\code{.compressTipLabel} transforms an object of class
\code{"multiPhylo"} by checking that all trees have the same tip
labels and renumbering the tips in the \code{edge} matrix so that the
tip numbers are also the same taking the first tree as the reference
(duplicated labels are not allowed). The returned object has a unique
vector of tip labels (\code{attr(x, "TipLabel")}).
\code{.uncompressTipLabel} does the reverse operation.
}
\value{
An object of class \code{"multiPhylo"}.
}
\author{Emmanuel Paradis}
\seealso{\code{\link{summary.phylo}}, \code{\link{multiphylo}}}
\examples{
x <- c(rtree(4), rtree(2))
x
y <- c(rtree(4), rtree(4))
z <- c(x, y)
z
print(z, TRUE)
try(.compressTipLabel(x)) # error
a <- .compressTipLabel(y)
.uncompressTipLabel(a) # back to y
## eventually compare str(a) and str(y)
}
\keyword{manip}