This is useful for functions that are "flaky", such as curl, which may fail for unknown reasons that do not persist.

retry(
expr,
envir = parent.frame(),
retries = 5,
exponentialDecayBase = 1.3,
silent = TRUE,
exprBetween = NULL,
messageFn = message
)

## Arguments

expr

Quoted expression to run, i.e., quote(...)

envir

The environment in which to evaluate the quoted expression, default to parent.frame(1)

retries

Numeric. The maximum number of retries.

exponentialDecayBase

Numeric > 1.0. The delay between successive retries will be runif(1, min = 0, max = exponentialDecayBase ^ i - 1) where i is the retry number (i.e., follows seq_len(retries))

silent

Logical indicating whether to try silently.

exprBetween

Another expression that should be run after a failed attempt of the expr. This should return a named list, where the names indicate the object names to update in the main expr, and the return value is the new value. (previous versions allowed a non-list return, but where the final line had to be an assignment operator, specifying what object (that is used in expr) will be updated prior to running the expr again. For backwards compatibility, this still works).

messageFn

A function for messaging to console. Defaults to message

## Value

As with try, so the successfully returned return() from the expr or a try-error.