R: Apply Functions on Results

reduceResultsList {batchtools} | R Documentation

## Apply Functions on Results

### Description

Applies a function on the results of your finished jobs and thereby collects them in a `list` or `data.table`. The later requires the provided function to return a list (or `data.frame`) of scalar values. See `rbindlist` for features and limitations of the aggregation.

If not all jobs are terminated, the respective result will be `NULL`.

### Usage

    reduceResultsList(ids = NULL, fun = NULL, ..., missing.val,
      reg = getDefaultRegistry())

    reduceResultsDataTable(ids = NULL, fun = NULL, ..., missing.val,
      reg = getDefaultRegistry())

### Arguments

`ids` | [`data.frame` or `integer`] A `data.frame` (or `data.table`) with a column named “job.id”. Alternatively, you may also pass a vector of integerish job ids. If not set, defaults to the return value of `findDone`. Invalid ids are ignored.
`fun` | [`function`] Function to apply to each result. The result is passed unnamed as first argument. If `NULL`, the identity is used. If the function has the formal argument “job”, the `Job`/`Experiment` is also passed to the function.
`...` | [`ANY`] Additional arguments passed to to function `fun`.
`missing.val` | [`ANY`] Value to impute as result for a job which is not finished. If not provided and a result is missing, an exception is raised.
`reg` | [`Registry`] Registry. If not explicitly passed, uses the default registry (see `setDefaultRegistry`).

### Value

`reduceResultsList` returns a list of the results in the same order as the provided ids. `reduceResultsDataTable` returns a `data.table` with columns “job.id” and additional result columns created via `rbindlist`, sorted by “job.id”.

### Note

If you have thousands of jobs, disabling the progress bar (`options(batchtools.progress = FALSE)`) can significantly increase the performance.

### See Also

`reduceResults`

Other Results: `batchMapResults`, `loadResult`, `reduceResults`

### Examples

    ### Example 1 - reduceResultsList
    tmp = makeRegistry(file.dir = NA, make.default = FALSE)
    batchMap(function(x) x^2, x = 1:10, reg = tmp)
    submitJobs(reg = tmp)
    waitForJobs(reg = tmp)
    reduceResultsList(fun = sqrt, reg = tmp)

    ### Example 2 - reduceResultsDataTable
    tmp = makeExperimentRegistry(file.dir = NA, make.default = FALSE)

    # add first problem
    fun = function(job, data, n, mean, sd, ...) rnorm(n, mean = mean, sd = sd)
    addProblem("rnorm", fun = fun, reg = tmp)

    # add second problem
    fun = function(job, data, n, lambda, ...) rexp(n, rate = lambda)
    addProblem("rexp", fun = fun, reg = tmp)

    # add first algorithm
    fun = function(instance, method, ...) if (method == "mean") mean(instance) else median(instance)
    addAlgorithm("average", fun = fun, reg = tmp)

    # add second algorithm
    fun = function(instance, ...) sd(instance)
    addAlgorithm("deviation", fun = fun, reg = tmp)

    # define problem and algorithm designs
    prob.designs = algo.designs = list()
    prob.designs$rnorm = CJ(n = 100, mean = -1:1, sd = 1:5)
    prob.designs$rexp = data.table(n = 100, lambda = 1:5)
    algo.designs$average = data.table(method = c("mean", "median"))
    algo.designs$deviation = data.table()

    # add experiments and submit
    addExperiments(prob.designs, algo.designs, reg = tmp)
    submitJobs(reg = tmp)

    # collect results and join them with problem and algorithm paramters
    res = ijoin(
      getJobPars(reg = tmp),
      reduceResultsDataTable(reg = tmp, fun = function(x) list(res = x))
    )
    unwrap(res, sep = ".")

[Package batchtools version 0.9.11 Index]