% File src/library/base/man/rle.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2014 R Core Team
% Distributed under GPL 2 or later

\name{rle}
\title{Run Length Encoding}
\alias{rle}
\alias{inverse.rle}
\alias{print.rle}
\concept{runs}
\description{
  Compute the lengths and values of runs of equal values in a vector
  -- or the reverse operation.
}
\usage{
rle(x)
inverse.rle(x, \dots)

\method{print}{rle}(x, digits = getOption("digits"), prefix = "", \dots)
}
\arguments{
  \item{x}{a vector (atomic, not a list) for \code{rle()};
    an object of class \code{"rle"} for \code{inverse.rle()}.}
  \item{\dots}{further arguments; ignored here.}
  \item{digits}{number of significant digits for printing, see
    \code{\link{print.default}}.}
  \item{prefix}{character string, prepended to each printed line.}
}
\details{
  \sQuote{vector} is used in the sense of \code{\link{is.vector}}.

  Missing values are regarded as unequal to the previous value, even if
  that is also missing.

  \code{inverse.rle()} is the inverse function of \code{rle()},
  reconstructing \code{x} from the runs.
}
\value{
  \code{rle()} returns an object of class \code{"rle"} which is a list
  with components:
  \item{lengths}{an integer vector containing the length of each run.}
  \item{values}{a vector of the same length as \code{lengths} with the
    corresponding values.}

  \code{inverse.rle()} returns an atomic vector.
}
\examples{
x <- rev(rep(6:10, 1:5))
rle(x)
## lengths [1:5]  5 4 3 2 1
## values  [1:5] 10 9 8 7 6

z <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE)
rle(z)
rle(as.character(z))
print(rle(z), prefix = "..| ")

N <- integer(0)
stopifnot(x == inverse.rle(rle(x)),
          identical(N, inverse.rle(rle(N))),
          z == inverse.rle(rle(z)))
}
\keyword{manip}
