doApply: Functions for Iterating Over All Subjobs

doApplyR Documentation

Functions for Iterating Over All Subjobs

Description

doLapply() iterates over all subjobs (using the non-parallel lapply()). Similarly, but in parallel, for doForeach (based on CRAN package foreach's foreach()), doRmpi (based on Rmpi's mpi.apply()), doMclapply (based on parallel's mclapply()), and doClusterApply (based on parallel's clusterApply()).

doRes.equal() is simple convenience wrapper for all.equal(), for comparing two results (from the same varlist and doOne arguments) of the do* lapply-like functions above.

Usage

doLapply(vList, seed="seq", repFirst=TRUE,
       sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
       doOne, ...)
doForeach(vList, cluster=makeCluster(detectCores(), type="PSOCK"),
       cores=NULL, block.size = 1, seed="seq", repFirst=TRUE,
       sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
       doOne, extraPkgs=character(), exports=character(), ...)
doRmpi(vList,
       nslaves = if((sz <- Rmpi::mpi.universe.size()) <= 1) detectCores() else sz,
       load.balancing=TRUE, block.size = 1, seed="seq", repFirst=TRUE,
       sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
       doOne, exports=character(), ...)
doMclapply(vList, cores = if(.Platform$OS.type == "windows") 1 else detectCores(),
       load.balancing=TRUE, block.size = 1, seed="seq", repFirst=TRUE,
       sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
       doOne, ...)
doClusterApply(vList, cluster=makeCluster(detectCores(), type="PSOCK"),
       load.balancing=TRUE, block.size = 1, seed="seq", repFirst=TRUE,
       sfile=NULL, check=TRUE, doAL=TRUE, subjob.=subjob, monitor=FALSE,
       doOne, initExpr, exports=character(), ...)

doRes.equal(x, y, tol = 1e-15, ...)

Arguments

vList

a list of variable specifications. Each variable spec is itself a named list which must contain a "value" component.

cluster

cluster object, typically generated by makeCluster(). For doForeach(), this can be NULL as well, see Details below.

cores

the number of cores. For doForeach(), this can be NULL as well, see Details below.

nslaves

the number of workers for doRmpi, passed to package Rmpi's mpi.spawn.Rslaves when no running workers are found.

load.balancing

logical indicating whether load balancing is used:

doRmpi()

mpi.applyLB() is used instead of mpi.apply().

doMclapply()

here, mc.preschedule=!load.balancing determines load balancing.

doClusterApply()

clusterApplyLB() instead of clusterApply().

block.size

size of blocks of rows in the virtual grid which are computed simultaneously (load-balancing).

seed, repFirst

see subjob().

sfile, check, doAL

see saveSim().

subjob.

a function for computing a subjob (one row of the virtual grid). Typically subjob().

doOne

a user-supplied function for computing one row of the (physical) grid.

monitor

a logical or a function for producing “monitoring” output; the function argument list must contain the one of printInfo[["default"]].

extraPkgs

character vector of packages to be made available on the nodes.

exports

character vector of functions (for doForeach() and doClusterApply()) or objects (for doRmpi()) to export.

initExpr

expression initially evaluated on the cluster (can be missing).

...

additional arguments passed to subjob() (typically further passed on to doOne()), or, for doRes.equal(), to all.equal(*).

x,y

each a result of, say doLapply() which should be compared where sensible, i.e., the first three components "value","error","warning", using all.equal.

tol

passed to all.equal(*).

Details

See the vignette or references in simsalapar-package for how to use these functions.

For reasons to choose "MPI" as cluster type (if not on Windows), see the discussion starting at https://stat.ethz.ch/pipermail/r-sig-hpc/2013-April/001647.html.

For doForeach(), precisely one of cluster or cores has to be not NULL. This will determine whether the parallel computations are carried out on a cluster with multiple nodes or on a multi-core processor.

Value

The result of applying subjob() to all subjobs, converted with saveSim().

Author(s)

Marius Hofert and Martin Maechler.

See Also

subjob() for computing a subjob. doCallWE() for the return value of doOne(). .Random.seed for information about random number generators and seeds.

Examples

 if(simsalapar:::doExtras()) { ## needs some CPU
   demo(robust.mean) # 512 simulations, differing block sizes, ...
 }

simsalapar documentation built on April 27, 2023, 9:05 a.m.