base (version 3.6.1)

asplit: Split Array/Matrix By Its Margins

Description

Split an array or matrix by its margins.

Usage

asplit(x, MARGIN)

Arguments

x

an array, including a matrix.

MARGIN

a vector giving the margins to split by. E.g., for a matrix 1 indicates rows, 2 indicates columns, c(1, 2) indicates rows and columns. Where x has named dimnames, it can be a character vector selecting dimension names.

Value

A “list array” with dimension \(dv\) and each element an array of dimension \(de\) and dimnames preserved as available, where \(dv\) and \(de\) are, respectively, the dimensions of x included and not included in MARGIN.

Details

The values of the splits can also be obtained (less efficiently) by split(x, slice.index(x, MARGIN)).

apply always simplifies common length results, so attempting to split via apply(x, MARGIN, identity) does not work (as it simply gives x). By chaining asplit with lapply or vapply, one can obtain variants of apply which do not auto-simplify.

Examples

Run this code
# NOT RUN {
## 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)
## Spltting by margins 1 and 2 gives a 2 x 3 list array
## consisting of 1-d arrays of length 4:a
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))
# }

Run the code above in your browser using DataLab