For each slice of an array, apply function then combine results into a list.
alply(
.data,
.margins,
.fun = NULL,
...,
.expand = TRUE,
.progress = "none",
.inform = FALSE,
.parallel = FALSE,
.paropts = NULL,
.dims = FALSE
)
matrix, array or data frame to be processed
a vector giving the subscripts to split up data
by.
1 splits up by rows, 2 by columns and c(1,2) by rows and columns, and so
on for higher dimensions
function to apply to each piece
other arguments passed on to .fun
if .data
is a data frame, should output be 1d (expand
= FALSE), with an element for each row; or nd (expand = TRUE), with a
dimension for each variable.
name of the progress bar to use, see
create_progress_bar
produce informative error messages? This is turned off by default because it substantially slows processing speed, but is very useful for debugging
if TRUE
, apply function in parallel, using parallel
backend provided by foreach
a list of additional options passed into
the foreach
function when parallel computation
is enabled. This is important if (for example) your code relies on
external data or packages: use the .export
and .packages
arguments to supply them so that all cluster nodes have the correct
environment set up for computing.
if TRUE
, copy over dimensions and names from input.
list of results
This function splits matrices, arrays and data frames by dimensions
If there are no results, then this function will return
a list of length 0 (list()
).
The list will have "dims" and "dimnames" corresponding to the
margins given. For instance alply(x, c(3,2), ...)
where
x
has dims c(4,3,2)
will give a result with dims
c(2,3)
.
alply
is somewhat similar to apply
for cases
where the results are not atomic.
Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. http://www.jstatsoft.org/v40/i01/.
# NOT RUN {
alply(ozone, 3, quantile)
alply(ozone, 3, function(x) table(round(x)))
# }
Run the code above in your browser using DataLab