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.