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

\name{aperm}
\title{Array Transposition}
\alias{aperm}
\alias{aperm.default}
\alias{aperm.table}
\description{
  Transpose an array by permuting its dimensions and optionally resizing
  it.
}
\usage{
aperm(a, perm, \dots)
\method{aperm}{default}(a, perm = NULL, resize = TRUE, \dots)
\method{aperm}{table}(a, perm = NULL, resize = TRUE, keep.class = TRUE, \dots)
}
\arguments{
  \item{a}{the array to be transposed.}
  \item{perm}{the subscript permutation vector, usually a permutation of
    the integers \code{1:n}, where \code{n} is the number of dimensions
    of \code{a}.  When \code{a} has named dimnames, it can be a
    character vector of length \code{n} giving a permutation of those
    names. The default (used whenever \code{perm} has zero length) is to
    reverse the order of the dimensions.}
  \item{resize}{a flag indicating whether the vector should be
    resized as well as having its elements reordered (default \code{TRUE}).}
  \item{keep.class}{logical indicating if the result should be of the
    same class as \code{a}.}
  \item{\dots}{potential further arguments of methods.}
}
\value{
  A transposed version of array \code{a}, with subscripts permuted as
  indicated by the array \code{perm}.  If \code{resize} is \code{TRUE},
  the array is reshaped as well as having its elements permuted, the
  \code{dimnames} are also permuted; if \code{resize = FALSE} then the
  returned object has the same dimensions as \code{a}, and the dimnames
  are dropped.  In each case other attributes are copied from \code{a}.

  The function \code{t} provides a faster and more convenient way of
  transposing matrices.
}
\author{Jonathan Rougier, \email{J.C.Rougier@durham.ac.uk} did the
  faster C implementation.
}
\references{
  \bibshow{R:Becker+Chambers+Wilks:1988}
}
\seealso{\code{\link{t}}, to transpose matrices.
}
\examples{
# interchange the first two subscripts on a 3-way array x
x  <- array(1:24, 2:4)
xt <- aperm(x, c(2,1,3))
stopifnot(t(xt[,,2]) == x[,,2],
          t(xt[,,3]) == x[,,3],
          t(xt[,,4]) == x[,,4])

UCB <- aperm(UCBAdmissions, c(2,1,3))
UCB[1,,]
summary(UCB) # UCB is still a contingency table
\dontshow{stopifnot(is.table(UCB))}
}
\keyword{array}
