Call a function with a vectorized input in parallel

Description

Call a function with a vectorized input in parallel, where the function is computationally intensive.

Usage

1
2
doCallParallel(fun, x, ..., njobs = parallel::detectCores() - 1,
  random.seed = NULL)

Arguments

fun

A function, or a text string with the name of the function, whose first argument is a vector and returns a corresponding vector

x

A vector of values that is the first argument to fun

njobs

The number of parallel jobs to spawn using parLapplyW.

random.seed

If a numeric value is provided, x is randomized to better distribute the work among the jobs if some values of x take longer to evaluate than others. The original ordering is restored before fun(x, ...) is returned. If NULL, no randomization is performed.

...

Additional named arguments for fun

Details

This function is a parallelized wrapper for do.call designed for the case where fun is computationally intensive. Each element of x is evaluated independently of the other elements of x. Thus, fun(c(x1,x2)) must be equivalent to c(fun(x1), fun(x2)) in order for doCallParallel to work properly.

Value

The same result that would be had by calling fun(x, ...), except calculated in parallel

Author(s)

Landon Sego

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Get a vector of x's
x <- rnorm(18, mean = 2, sd = 2)

# 2 cores
y1 <- doCallParallel("pnorm", x, mean = 2, sd = 2, njobs = 2)

# 2 cores and randomization
y2 <- doCallParallel(pnorm, x, mean = 2, sd = 2, njobs = 2, random.seed = 1)

# Without using doCallParallel()
y3 <- pnorm(x, mean = 2, sd = 2)

# Comparisons
identical(y1, y2)
identical(y1, y3)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.