future_apply {future.apply} | R Documentation |
Apply Functions Over Array Margins via Futures
Description
future_apply()
implements base::apply()
using future with perfect
replication of results, regardless of future backend used.
It returns a vector or array or list of values obtained by applying a
function to margins of an array or matrix.
Usage
future_apply(
X,
MARGIN,
FUN,
...,
simplify = TRUE,
future.envir = parent.frame(),
future.stdout = TRUE,
future.conditions = "condition",
future.globals = TRUE,
future.packages = NULL,
future.seed = FALSE,
future.scheduling = 1,
future.chunk.size = NULL,
future.label = "future_apply-%d"
)
Arguments
X |
an array, including a matrix. |
MARGIN |
A vector giving the subscripts which the function will be
applied over. For example, for a matrix |
FUN |
A function taking at least one argument. |
simplify |
a logical indicating whether results should be simplified if possible. |
future.envir |
An environment passed as argument |
future.stdout |
If |
future.conditions |
A character string of conditions classes to be
captured and relayed. The default is the same as the |
future.globals |
A logical, a character vector, or a named list for controlling how globals are handled. For details, see below section. |
future.packages |
(optional) a character vector specifying packages to be attached in the R environment evaluating the future. |
future.seed |
A logical or an integer (of length one or seven),
or a list of |
future.scheduling |
Average number of futures ("chunks") per worker.
If |
future.chunk.size |
The average number of elements per future ("chunk").
If |
future.label |
If a character string, then each future is assigned
a label |
... |
(optional) Additional arguments passed to |
Value
Returns a vector or array or list of values obtained by applying a
function to margins of an array or matrix.
See base::apply()
for details.
Author(s)
The implementations of future_apply()
is adopted from the source code
of the corresponding base R function, which is licensed under GPL (>= 2)
with 'The R Core Team' as the copyright holder.
Examples
## ---------------------------------------------------------
## apply()
## ---------------------------------------------------------
X <- matrix(c(1:4, 1, 6:8), nrow = 2L)
Y0 <- apply(X, MARGIN = 1L, FUN = table)
Y1 <- future_apply(X, MARGIN = 1L, FUN = table)
print(Y1)
stopifnot(all.equal(Y1, Y0, check.attributes = FALSE)) ## FIXME
Y0 <- apply(X, MARGIN = 1L, FUN = stats::quantile)
Y1 <- future_apply(X, MARGIN = 1L, FUN = stats::quantile)
print(Y1)
stopifnot(all.equal(Y1, Y0))
## ---------------------------------------------------------
## Parallel Random Number Generation
## ---------------------------------------------------------
## Regardless of the future plan, the number of workers, and
## where they are, the random numbers produced are identical
X <- matrix(c(1:4, 1, 6:8), nrow = 2L)
plan(multisession)
set.seed(0xBEEF)
Y1 <- future_apply(X, MARGIN = 1L, FUN = sample, future.seed = TRUE)
print(Y1)
plan(sequential)
set.seed(0xBEEF)
Y2 <- future_apply(X, MARGIN = 1L, FUN = sample, future.seed = TRUE)
print(Y2)
stopifnot(all.equal(Y1, Y2))