Inspired by mapply
, this function applies a given function to each data
component in
the input multiData arguments, and optionally simplify the result to an array if possible.
mtd.mapply( # What to do
FUN, ..., MoreArgs = NULL,
# How to interpret the input
mdma.argIsMultiData = NULL,
# Copy previously known results?
mdmaExistingResults = NULL, mdmaUpdateIndex = NULL,
# How to format output
mdmaSimplify = FALSE,
returnList = FALSE,
# Options controlling internal behaviour
mdma.doCollectGarbage = FALSE,
mdmaVerbose = 0, mdmaIndent = 0)
Function to be applied.
Arguments to be vectorized over. These can be multiData structures or simple vectors (e.g., lists).
A named list that specifies the scalar arguments (if any) to FUN
.
Optional specification whether arguments are multiData structures. A logical vector where each component
corresponds to one entry of ...
. If not given, multiData status will be determined using
isMultiData
with argument strict=FALSE
.
Optional list that contains previously calculated results. This can be useful
if only a few sets in multiData
have changed and recalculating the unchanged ones is computationally
expensive. If not given, all calculations will be performed. If given, components of this list are copied
into the output. See mdmUpdateIndex
for which components are re-calculated by default.
Optional specification of which sets in multiData
the calculation should
actually be carried out. This argument has an effect only if mdmaExistingResults
is non-NULL. If the
length of mdmaExistingResults
(call the length `k')
is less than the number of sets in multiData
, the function
assumes that the existing results correspond to the first `k' sets in multiData
and the rest of the
sets are automatically calculated, irrespective of the setting of mdmaUpdateIndex
. The argument
mdmaUpdateIndex
can be used to specify re-calculation of some (or all) of the results that already
exist in mdmaExistingResults
.
Logical: should simplification of the result to an array be attempted? The simplification is fragile and
can produce unexpected errors; use the default FALSE
if that happens.
Logical: should the result be turned into a list (rather than a multiData structure)?
Note that this is incompatible with simplification: if mdaSimplify
is TRUE
, this argument is
ignored.
Should garbage collection be forced after each application of FUN
?
Integer specifying whether progress diagnistics should be printed out. Zero means silent, increasing values will lead to more diagnostic messages.
Integer specifying the indentation of the printed progress messages. Each unit equals two spaces.
A multiData structure containing (as the data
components) the results of FUN
. If
simplification is successful, an array instead.
A multiData structure is intended to store (the same type of) data for multiple, possibly independent,
realizations
(for example, expression data for several independent experiments). It is a list where
each component corresponds to an (independent) data set. Each component is in turn a list that can hold
various types of information but must have a data
component. In a "strict" multiData structure, the
data
components are required to each be a matrix or a data frame and have the same number of
columns. In a "loose" multiData structure, the data
components can be anything (but for most
purposes should be of comparable type and content).
This function applies the function FUN
to each data
component of those arguments in
...
that are multiData structures in the "loose" sense,
and to each component of those arguments in ...
that are
not multiData structures.
multiData
to create a multiData structure;
multiData.apply
for application of a function to a single multiData structure.