asplit {base} | R Documentation |
Split Array/Matrix By Its Margins
Description
Split an array or matrix by its margins.
Usage
asplit(x, MARGIN, drop = FALSE)
Arguments
x |
an array, including a matrix. |
MARGIN |
a vector giving the margins to split by.
E.g., for a matrix |
drop |
a logical indicating whether the splits should drop dimensions and dimnames. |
Details
Since R 4.1.0, one can also obtain the splits (less efficiently)
using apply(x, MARGIN, identity, simplify = FALSE)
.
The values of the splits can also be obtained (less efficiently) by
split(x, slice.index(x, MARGIN))
.
Value
A “list array” with dimension dv
and each element an
array of dimension de
and dimnames preserved as available if
drop
is false and a vector otherwise, where
dv
and de
are, respectively, the dimensions of x
included and not included in MARGIN
.
Examples
## A 3-dimensional array of dimension 2 x 3 x 4:
d <- 2 : 4
x <- array(seq_len(prod(d)), d)
x
## Splitting by margin 2 gives a 1-d list array of length 3
## consisting of 2 x 4 arrays:
asplit(x, 2)
## Splitting by margins 1 and 2 gives a 2 x 3 list array
## consisting of 1-d arrays of length 4:
asplit(x, c(1, 2))
## Compare to
split(x, slice.index(x, c(1, 2)))
## A 2 x 3 matrix:
(x <- matrix(1 : 6, 2, 3))
## To split x by its rows, one can use
asplit(x, 1)
## or less efficiently
split(x, slice.index(x, 1))
split(x, row(x))