| UserApiConsumer {parabar} | R Documentation |
UserApiConsumer
Description
This class is an opinionated interface around the developer API of the
parabar package. See the Details section for more
information on how this class works.
Details
This class acts as a wrapper around the R6::R6 developer API of the
parabar package. In a nutshell, it provides an opinionated
interface by wrapping the developer API in simple functional calls. More
specifically, for executing a task in parallel, this class performs the
following steps:
Validates the backend provided.
Instantiates an appropriate
parabarcontext based on the backend. If the backend supports progress tracking (i.e., the backend is an instance ofAsyncBackend), a progress tracking context (i.e.,ProgressTrackingContext) is instantiated and used. Otherwise, a regular context (i.e.,Context) is instantiated. A regular context is also used if the progress tracking is disabled via theOptionsinstance.Registers the
backendwith the context.Instantiates and configures the progress bar based on the
Optionsinstance in the sessionbase::.Optionslist.Executes the task in parallel, and displays a progress bar if appropriate.
Fetches the results from the backend and returns them.
Methods
Public methods
Method sapply()
Execute a task in parallel akin to parallel::parSapply().
Usage
UserApiConsumer$sapply(backend, x, fun, ...)
Arguments
backendAn object of class
Backendas returned by thestart_backend()function. It can also beNULLto run the task sequentially viabase::sapply().xAn atomic vector or list to pass to the
funfunction.funA function to apply to each element of
x....Additional arguments to pass to the
funfunction.
Returns
A vector of the same length as x containing the results of the
fun. The output format resembles that of base::sapply().
Method lapply()
Execute a task in parallel akin to parallel::parLapply().
Usage
UserApiConsumer$lapply(backend, x, fun, ...)
Arguments
backendAn object of class
Backendas returned by thestart_backend()function. It can also beNULLto run the task sequentially viabase::lapply().xAn atomic vector or list to pass to the
funfunction.funA function to apply to each element of
x....Additional arguments to pass to the
funfunction.
Returns
A list of the same length as x containing the results of the fun.
The output format resembles that of base::lapply().
Method apply()
Execute a task in parallel akin to parallel::parApply().
Usage
UserApiConsumer$apply(backend, x, margin, fun, ...)
Arguments
backendAn object of class
Backendas returned by thestart_backend()function. It can also beNULLto run the task sequentially viabase::apply().xAn array to pass to the
funfunction.marginA numeric vector indicating the dimensions of
xthefunfunction should be applied over. For example, for a matrix,margin = 1indicates applyingfunrows-wise,margin = 2indicates applyingfuncolumns-wise, andmargin = c(1, 2)indicates applyingfunelement-wise. Named dimensions are also possible depending onx. Seeparallel::parApply()andbase::apply()for more details.funA function to apply to
xaccording to themargin....Additional arguments to pass to the
funfunction.
Returns
The dimensions of the output vary according to the margin argument.
Consult the documentation of base::apply() for a detailed
explanation on how the output is structured.
Method clone()
The objects of this class are cloneable with this method.
Usage
UserApiConsumer$clone(deep = FALSE)
Arguments
deepWhether to make a deep clone.
See Also
start_backend(), stop_backend(),
configure_bar(), par_sapply(), and
par_lapply().
Examples
# Define a simple task.
task <- function(x) {
# Perform computations.
Sys.sleep(0.01)
# Return the result.
return(x + 1)
}
# Start an asynchronous backend.
backend <- start_backend(cores = 2, cluster_type = "psock", backend_type = "async")
# Change the progress bar options.
configure_bar(type = "modern", format = "[:bar] :percent")
# Create an user API consumer.
consumer <- UserApiConsumer$new()
# Execute the task using the `sapply` parallel operation.
output_sapply <- consumer$sapply(backend = backend, x = 1:200, fun = task)
# Print the head of the `sapply` operation output.
head(output_sapply)
# Execute the task using the `sapply` parallel operation.
output_lapply <- consumer$lapply(backend = backend, x = 1:200, fun = task)
# Print the head of the `lapply` operation output.
head(output_lapply)
# Stop the backend.
stop_backend(backend)