Description Usage Arguments Value Note Examples
View source: R/array_transform.R
Transpose an array by permuting its dimensions and optionally resizing it.
This function is a simple wrapper around aperm.default
with two
minimal enhancements: 1) It checks if the permutation order is the same as
the original order of the dimensions. In this case it simply returns a copy
of the input array without any unnecessary time-consuming manipulation. See
also NOTE. 2) It allows for partial definition of the permutation order.
See argument 'first'.
1 2 3 4 5 6 7 | apermArray(
a,
perm = NULL,
resize = TRUE,
first = perm,
keep_attributes. = FALSE
)
|
a |
the array to be transposed |
perm |
the subscript permutation vector, usually a permutation of the integers 1:n, where n is the number of dimensions of a. When a has named dimnames, it can be a character vector of length n giving a permutation of those names. The default (used whenever perm has zero length) is to reverse the order of the dimensions. |
resize |
a flag indicating whether the vector should be resized as well as having its elements reordered (default: TRUE) |
first |
dimension(s) which should come first; either numeric index(es), or if the array has named dimensions, 'first' can be a character vector. Ignored if 'perm' is not NULL. |
keep_attributes. |
see NOTE (default: FALSE) |
A transposed version of array a
, with subscripts permuted as
indicated by the array perm
. If resize
is TRUE, the array is
reshaped as well as having its elements permuted, the dimnames are also
permuted; if resize = FALSE
then the returned object has the same
dimensions as a
, and the dimnames are dropped. In each case other
attributes are dropped unless keep_attributes. = TRUE
. See NOTE!
The documentation of aperm
wrongly states that "other
attributes are copied from a
". Instead, aperm
drops all
attributes other than dim
and dimnames
. To make
apermArray
a replacement function of aperm
, this unexpected
behaviour is also reproduced unless explicitly required by the user not to
do so.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # example data
data(erps)
str(erps) # five dimensions
# a use case where argument 'first' is helpful: suppose we need 'time'
# as the first dimension
time_first <- apermArray(erps, first = "time")
# compare to the more cumbersome perm = setdiff(...) solution
time_first_aperm <- aperm(erps,
perm = c("time",
setdiff(names(dimnames(erps)), "time")))
stopifnot(identical(time_first, time_first_aperm))
# create permutation order by simply replicating the original order;
# note that in this special case it is more efficient to request
# keep_attributes. = TRUE
perm <- seq_along(dim(erps))
# timing
if (require(microbenchmark)) {
microbenchmark(
aperm(erps, perm),
apermArray(erps, perm),
apermArray(erps, names(dimnames(erps))),
apermArray(erps, perm, keep_attributes. = TRUE),
times = 200L
)
}
# check if identical
aperm_orig <- aperm(erps, perm)
stopifnot(identical(aperm_orig,
apermArray(erps, perm)))
stopifnot(identical(aperm_orig,
apermArray(erps, names(dimnames(erps)))))
stopifnot(all.equal(aperm_orig,
apermArray(erps, perm, keep_attributes. = TRUE),
check.attributes = FALSE))
stopifnot(identical(erps,
apermArray(erps, perm, keep_attributes. = TRUE)))
# if resize = FALSE, dimension names are dropped
noresize <- apermArray(erps, perm, resize = FALSE)
stopifnot(is.null(dimnames(noresize)))
stopifnot(identical(unname(aperm_orig),
noresize))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.