1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
.optionRegistry <- setRefClass(".BiocParallelOptionsRegistry",
fields=list(
options = "list"),
methods=list(
register = function(optionName, genericName) {
if (!is.null(.self$options[[optionName]]))
message("Replacing the function `",
optionName,
"` from the option registry")
.self$options[[optionName]] <- genericName
invisible(registered())
},
registered = function() {
.self$options
})
)$new() # Singleton
## Functions to register the S4generic for BPPARAM
.registeredOptions <-
function()
{
.optionRegistry$registered()
}
.registerOption <-
function(optionName, genericName)
{
getter <- getGeneric(genericName)
setter <- getGeneric(paste0(genericName, "<-"))
if (is.null(getter))
stop("The S4 function '", genericName, "' is not found")
if (is.null(setter))
stop("The S4 replacement function '", genericName, "' is not found")
.optionRegistry$register(optionName, genericName)
}
.registerOption("workers", "bpworkers")
.registerOption("tasks", "bptasks")
.registerOption("jobname", "bpjobname")
.registerOption("log", "bplog")
.registerOption("logdir", "bplogdir")
.registerOption("threshold", "bpthreshold")
.registerOption("resultdir", "bpresultdir")
.registerOption("stop.on.error", "bpstopOnError")
.registerOption("timeout", "bptimeout")
.registerOption("exportglobals", "bpexportglobals")
.registerOption("exportvariables", "bpexportvariables")
.registerOption("progressbar", "bpprogressbar")
.registerOption("RNGseed", "bpRNGseed")
.registerOption("force.GC", "bpforceGC")
.registerOption("fallback", "bpfallback")
## functions for changing the paramters in BPPARAM
.bpparamOptions <-
function(BPPARAM, optionNames)
{
registeredOptions <- .registeredOptions()
## find the common parameters both BPPARAM and BPOPTIONS
paramOptions <- intersect(names(registeredOptions), optionNames)
getterNames <- unlist(registeredOptions[paramOptions])
setNames(lapply(
getterNames,
do.call,
args = list(BPPARAM)
), paramOptions)
}
## value: BPOPTIONS
`.bpparamOptions<-` <-
function(BPPARAM, value)
{
BPOPTIONS <- value
registeredOptions <- .registeredOptions()
optionNames <- names(BPOPTIONS)
paramOptions <- intersect(names(registeredOptions), optionNames)
setterNames <- paste0(unlist(registeredOptions[paramOptions]), "<-")
for (i in seq_along(paramOptions)) {
paramOption <- paramOptions[i]
setterName <- setterNames[i]
do.call(
setterName,
args = list(BPPARAM, BPOPTIONS[[paramOption]])
)
}
BPPARAM
}
## Check any possible issues in bpoptions
.validateBpoptions <-
function(BPOPTIONS)
{
bpoptionsArgs <- names(formals(bpoptions))
registeredOptions <- names(.registeredOptions())
allOptions <- c(bpoptionsArgs, registeredOptions)
idx <- which(!names(BPOPTIONS) %in% allOptions)
if (length(idx))
message(
"unregistered options found in bpoptions:\n",
" ", paste0(names(BPOPTIONS)[idx], collapse = ", ")
)
}
## The function simply return a list of its arguments
bpoptions <-
function(
workers, tasks, jobname,
log, logdir, threshold,
resultdir, stop.on.error,
timeout, exportglobals, exportvariables,
progressbar,
RNGseed, force.GC,
fallback,
exports, packages,
...)
{
dotsArgs <- list(...)
passed <- names(as.list(match.call())[-1])
passed <- setdiff(passed, names(dotsArgs))
if (length(passed))
passedArgs <- setNames(mget(passed), passed)
else
passedArgs <- NULL
opts <- c(passedArgs, dotsArgs)
.validateBpoptions(opts)
opts
}
|