| Title: | Map in Parallel with Progress | 
| Version: | 1.0.0 | 
| Description: | Provides one function, which is a wrapper around purrr::map() with some extras on top, including parallel computation, progress bars, error handling, and result caching. | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| Imports: | memoise, progress, pbmcapply, parallel, parallelly, purrr, rlang | 
| RoxygenNote: | 7.1.1 | 
| URL: | https://github.com/cole-brokamp/mappp | 
| BugReports: | https://github.com/cole-brokamp/mappp/issues | 
| Suggests: | testthat (≥ 3.0.0) | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2022-01-24 16:47:04 UTC; broeg1 | 
| Author: | Cole Brokamp [aut, cre] | 
| Maintainer: | Cole Brokamp <cole.brokamp@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2022-01-25 09:22:42 UTC | 
map in parallel with progress
Description
This function is a wrapper around purrr::map()
(which applies a function to each element of a list or atomic vector) with some extras on top,
including parallel computation, progress bar, error handling, and result caching.
Usage
mappp(
  .x,
  .f,
  parallel = FALSE,
  cache = FALSE,
  cache_name = "cache",
  error_capture = TRUE,
  error_quiet = TRUE,
  num_cores = NULL
)
Arguments
.x | 
 list or vector of objects to apply over  | 
.f | 
 function to apply; allows for compact anonymous functions (see
  | 
parallel | 
 logical; use parallel processing?  | 
cache | 
 defaults to FALSE, which means no cache used. If TRUE, cache the results locally in a folder named according to   | 
cache_name | 
 a character string to use a custom cache folder name (e.g. "my_cache"); defaults to "cache"  | 
error_capture | 
 apply function to all elements and return those that error as   | 
error_quiet | 
 quiet individual error messages when capturing error messages? or show them as they occur?  | 
num_cores | 
 the number of cores used for parallel processing. Can be specified as an integer, or it will guess the number of cores available with parallelly::availableCores(). won't have an effect if parallel is FALSE  | 
Details
mappp is designed for long computations and as such it always uses a progress bar,
and always returns a list. Long computations shouldn't worry about being type
strict; instead, extract results in the right type from the results list.
A progress bar will be shown in the terminal using an interactive R session or in an .Rout file, if using R CMD BATCH and submitting R scripts for non-interactive completion. Although R Studio supports the progress bar for single process workers, it has a problem showing the progress bar if using parallel processing (see the discussion at http://stackoverflow.com/questions/27314011/mcfork-in-rstudio). In this specific case (R Studio + parallel processing), text updates will be printed to the file '.progress'. Use a shell and 'tail -f .progress' to see the updates.
Value
a list the same length as .x
Examples
X <- list("x" = 100, "y" = "a", "z" = 200)
slow_log <- function(.x) {
  Sys.sleep(0.5)
  log(.x)
}
# by default returns NA on error
mappp(X, slow_log)
# when not using error, entire calculation will fail
mappp(X, slow_log, error_capture = FALSE)
# showing error messages when they occur rather than afterwards can be useful
# but will cause problems with progress bar displays
mappp(X, slow_log, error_quiet = FALSE)