\HeaderA{unique}{Extract Unique Elements}{unique}
\methaliasA{unique.array}{unique}{unique.array}
\methaliasA{unique.data.frame}{unique}{unique.data.frame}
\methaliasA{unique.default}{unique}{unique.default}
\methaliasA{unique.matrix}{unique}{unique.matrix}
\keyword{manip}{unique}
\keyword{logic}{unique}
\begin{Description}\relax
\code{unique} returns a vector, data frame or array like \code{x}
but with duplicate elements/rows removed.
\end{Description}
\begin{Usage}
\begin{verbatim}
unique(x, incomparables = FALSE, ...)

## Default S3 method:
unique(x, incomparables = FALSE, fromLast = FALSE, ...)

## S3 method for class 'matrix':
unique(x, incomparables = FALSE, MARGIN = 1,
       fromLast = FALSE, ...)

## S3 method for class 'array':
unique(x, incomparables = FALSE, MARGIN = 1,
       fromLast = FALSE, ...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{x}] a vector or a data frame or an array or \code{NULL}.
\item[\code{incomparables}] a vector of values that cannot be compared.
Currently, \code{FALSE} is the only possible value, meaning that all
values can be compared.
\item[\code{fromLast}] logical indicating if duplication should be considered
from the last, i.e., the last (or rightmost) of identical elements will
be kept.  This only matters for \code{\LinkA{names}{names}} or
\code{\LinkA{dimnames}{dimnames}}.
\item[\code{...}] arguments for particular methods.
\item[\code{MARGIN}] the array margin to be held fixed: a single integer.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This is a generic function with methods for vectors, data frames and
arrays (including matrices).

The array method calculates for each element of the dimension
specified by \code{MARGIN} if the remaining dimensions are identical
to those for an earlier element (in row-major order).  This would most
commonly be used for matrices to find unique rows (the default) or columns
(with \code{MARGIN = 2}).

Note that unlike the Unix command \code{uniq} this omits
\emph{duplicated} and not just \emph{repeated} elements/rows.  That
is, an element is omitted if it is identical to any previous element
and not just if it is the same as the immediately previous one.
\end{Details}
\begin{Value}
For a vector, an object of the same type of \code{x}, but with only
one copy of each duplicated element.  No attributes are copied (so
the result has no names).

For a data frame, a data frame is returned with the same columns but
possibly fewer rows (and with row names from the first occurrences of
the unique rows).

A matrix or array is subsetted by \code{[, drop = FALSE]}, so
dimensions and dimnames are copied appropriately, and the result
always has the same number of dimensions as \code{x}.
\end{Value}
\begin{Section}{Warning}
Using this for lists is potentially slow, especially if the elements
are not atomic vectors (see \code{\LinkA{vector}{vector}}) or differ only
in their attributes.  In the worst case it is \eqn{O(n^2)}{}.
\end{Section}
\begin{References}\relax
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth \& Brooks/Cole.
\end{References}
\begin{SeeAlso}\relax
\code{\LinkA{duplicated}{duplicated}} which gives the indices of duplicated
elements.

\code{\LinkA{rle}{rle}} which is the equivalent of the Unix \code{uniq -c}
command.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
x <- c(3:5, 11:8, 8 + 0:5)
(ux <- unique(x))
(u2 <- unique(x, fromLast = TRUE)) # different order
stopifnot(identical(sort(ux), sort(u2)))

length(unique(sample(100, 100, replace=TRUE)))
## approximately 100(1 - 1/e) = 63.21

unique(iris)
\end{ExampleCode}
\end{Examples}

