\HeaderA{uniquecombs}{find the unique rows in a matrix}{uniquecombs}
\keyword{models}{uniquecombs}
\keyword{regression}{uniquecombs}
\begin{Description}\relax
This routine returns a matrix containing all the unique rows of the
matrix supplied as its argument. That is, all the duplicate rows are
stripped out. Note that the ordering of the rows on exit is not the same
as on entry. It also returns an index attribute for relating the result back 
to the original matrix.
\end{Description}
\begin{Usage}
\begin{verbatim}
uniquecombs(x)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{x}] is an \R{} matrix (numeric) 
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
Models with more parameters than unique combinations of
covariates are not identifiable. This routine provides a means of
evaluating the number of unique combinations of coavariates in a
model. The routine calls compiled C code.
\end{Details}
\begin{Value}
A matrix consisting of the unique rows of \code{x} (in arbitrary order).

The matrix has an \code{"index"} attribute. \code{index[i]} gives the row of the returned 
matrix that contains row i of the original matrix.
\end{Value}
\begin{Author}\relax
Simon N. Wood \email{simon.wood@r-project.org}
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{unique}{unique}} can do the same thing, including for non-numeric matrices, but more 
slowly and without returning the index.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
X<-matrix(c(1,2,3,1,2,3,4,5,6,1,3,2,4,5,6,1,1,1),6,3,byrow=TRUE)
print(X)
Xu <- uniquecombs(X);Xu
ind <- attr(Xu,"index")
## find the value for row 3 of the original from Xu
Xu[ind[3],];X[3,]
\end{ExampleCode}
\end{Examples}

