## Introduction

The future package provides a generic API for using futures in R. A future is a simple yet powerful mechanism to evaluate an R expression and retrieve its value at some point in time. Futures can be resolved in many different ways depending on which strategy is used. There are various types of synchronous and asynchronous futures to choose from in the future package. Additional futures are implemented in other packages. For instance, the future.batchtools package provides futures for any type of backend that the batchtools package supports. For an introduction to futures in R, please consult the vignettes of the future package.

The BiocParallel.FutureParam package provides FutureParam, a BiocParallelParam class, for the BiocParallel package that works with any type of future. The BiocParallel.FutureParam package is cross platform just as the future package.

Below is an example showing how to use FutureParam with multicore futures. A multicore future will be evaluated in parallel using forked workers, which is not supported on MS Windows when it will fall back to sequential processing.

library("BiocParallel.FutureParam")
register(FutureParam())
plan(multicore)

mu <- 1.0
sigma <- 2.0
x <- bplapply(1:3, mu = mu, sigma = sigma, function(i, mu, sigma) {
rnorm(i, mean = mu, sd = sigma)
})

## FutureParam replaces existing BiocParallelParam classes

Due to the generic nature of futures, the FutureParam class provides the same functionality as many of the existing BiocParallelParam classes, e.g. SerialParam, SnowParam, MulticoreParam, BatchtoolsParam and DoParParam. In addition, it provides supports for additional backends that are not yet implemented in BiocParallel, e.g. callr and batchtools.

BiocParallel usage BiocParallel.FutureParam alternative
library("BiocParallel")
register(SerialParam())


library("BiocParallel.FutureParam")
register(FutureParam())
plan(sequential)

library("BiocParallel")
register(MulticoreParam())


library("BiocParallel.FutureParam")
register(FutureParam())
plan(multicore)

library("BiocParallel")
register(SnowParam(2, type = "SOCK"))


library("BiocParallel.FutureParam")
register(FutureParam())
plan(multisession, workers = 2)

library("BiocParallel")
cl 
library("BiocParallel.FutureParam")
register(FutureParam())
cl 
library("BiocParallel")
register(SnowParam(4, type = "MPI"))


library("BiocParallel.FutureParam")
register(FutureParam())
cl 
library("BiocParallel")
register(BatchtoolsParam(cluster="sge",
template="~/sge.tmpl"))

library("BiocParallel.FutureParam")
register(FutureParam())
plan(future.batchtools::batchtools_sge,
template = "~/sge.tmpl")

N/A
library("BiocParallel.FutureParam")
register(FutureParam())
plan(future.callr::callr)


## [future.callr]: https://cran.r-project.org/package=future.callr

Copyright Henrik Bengtsson, 2016-2021