diversitree (version 0.9-9)

protect: Protect Function Evaluations

Description

Ensures non-failure and possibly finite-ness of a function evaluation.

Usage

protect(f, fail.value.default=NULL) invert(f)

Arguments

f
A function.
fail.value.default
Value that will be used as on failure of f, if not overridden. The default here (NULL) will allow failure.

Details

protect returns a function with arguments
    g(..., fail.value=fail.value.default, finite=NULL)
  
The ... arguments are all passed through to the underlying function f, fail.value contains the value to return in the event of a failure (e.g., an error occuring). If finite is TRUE, then fail.value is also returned where the value is NA, NaN or infinite. Some functions, such as optim with method L-BFGS-B (and therefore find.mle), require that every value is finite. Optimisation with these functions also requires that the target functions to not generate errors. protect catches these issues, returning the value of fail.value instead.

No check is made that f returns a single value, but it should.

Examples

Run this code
f <- function(x) log(x)
g <- protect(f)
f(0) # -Inf
g(0, fail.value=-999) # -999

f <- function(x) {
  if ( x < 1 )
    stop("dummmy error")
  x
}
g <- protect(f)
## Not run: 
# f(0) # error
# ## End(Not run)
g(0, fail.value=-999) # -999

Run the code above in your browser using DataLab