\name{readCelIntensities}
\alias{readCelIntensities}

\title{
  Reads the intensities contained in several Affymetrix CEL files
}

\description{
Reads the intensities of several Affymetrix CEL files (as opposed to
\code{readCel}() which only reads a single file).
} 

\usage{
 readCelIntensities(filenames, indices = NULL, ..., verbose = 0)
}

\arguments{
\item{filenames}{the names of the CEL files as a character vector.}
\item{indices}{a vector of which indices should be read. If the argument
  is \code{NULL} all features will be returned.}
\item{...}{Additional arguments passed to \code{readCel}().}
\item{verbose}{an integer: how verbose do we want to be, higher means
  more verbose.}
}

\details{
  The function will initially allocate a matrix with the same
  memory footprint as the final object.
}

\value{
  A matrix with a number of rows equal to the length of the
  \code{indices} argument (or the number of features on the entire
  chip), and a number of columns equal to the number of files. The
  columns are ordered according to the \code{filenames} argument.
}

\author{
  James Bullard, \email{bullard@stat.berkeley.edu} and
  Kasper Daniel Hansen, \email{khansen@stat.berkeley.edu}
}

\note{
  Currently this function builds on \code{readCel}(), and simply
  calls this function multiple times. If testing yields sufficient
  reasons for doing so, it may be re-implemented in C++.
}

\seealso{
  \code{\link{readCel}}() for a discussion of a more versatile function,
  particular with details of the \code{indices} argument.
}

\examples{
  # Scan current directory for CEL files
  files <- list.files(pattern="[.](c|C)(e|E)(l|L)$")
  if (length(files) >= 2) {
    cel <- readCelIntensities(files[1:2])
    str(cel)
    rm(cel)
  }

  # Clean up
  rm(files)
}

\keyword{file}
\keyword{IO}