blob: 1ef35c1ee81efba9fb8cb1535d574e69a8457f24 [file] [log] [blame]
% 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}