Try an Expression Allowing Error Recovery (original) (raw)

try {base} R Documentation

Description

try is a wrapper to run an expression that might fail and allow the user's code to handle error-recovery.

Usage

try(expr, silent = FALSE,
    outFile = getOption("try.outFile", default = stderr()))

Arguments

expr an R expression to try.
silent logical: should the report of error messages be suppressed?
outFile a connection, or a character string naming the file to print to (via cat(*, file = outFile)); used only if silent is false, as by default.

Details

try evaluates an expression and traps any errors that occur during the evaluation. If an error occurs then the error message is printed to the [stderr](../../base/help/stderr.html) connection unlessoptions("show.error.messages") is false or the call includes silent = TRUE. The error message is also stored in a buffer where it can be retrieved bygeterrmessage. (This should not be needed as the value returned in case of an error contains the error message.)

try is implemented using [tryCatch](../../base/help/tryCatch.html); for programming, instead of try(expr, silent = TRUE), something liketryCatch(expr, error = function(e) e) (or other simple error handler functions) may be more efficient and flexible.

It may be useful to set the default for outFile to[stdout](../../base/help/stdout.html)(), i.e.,

options(try.outFile = stdout())

instead of the default [stderr](../../base/help/stderr.html)(), notably when try() is used inside a [Sweave](../../utils/html/Sweave.html) code chunk and the error message should appear in the resulting document.

Value

The value of the expression if expr is evaluated without error: otherwise an invisible object inheriting from class "try-error"containing the error message with the error condition as the"condition" attribute.

Warning

Do not test

if (class(res) == "try-error"))

as if there is no error, the result might (now or in future) have a class of length > 1. Use if([inherits](../../base/help/inherits.html)(res, "try-error"))instead.

See Also

[options](../../base/help/options.html) for setting error handlers and suppressing the printing of error messages;[geterrmessage](../../base/help/geterrmessage.html) for retrieving the last error message. The underlying [tryCatch](../../base/help/tryCatch.html) provides more flexible means of catching and handling errors.

[assertCondition](../../tools/html/assertCondition.html) in package tools is related and useful for testing.

Examples

## this example will not work correctly in example(try), but
## it does work correctly if pasted in
options(show.error.messages = FALSE)
try(log("a"))
print(.Last.value)
options(show.error.messages = TRUE)

## alternatively,
print(try(log("a"), TRUE))

## run a simulation, keep only the results that worked.
set.seed(123)
x <- stats::rnorm(50)
doit <- function(x)
{
    x <- sample(x, replace = TRUE)
    if(length(unique(x)) > 30) mean(x)
    else stop("too few unique points")
}
## alternative 1
res <- lapply(1:100, function(i) try(doit(x), TRUE))
## alternative 2
## Not run: res <- vector("list", 100)
for(i in 1:100) res[[i]] <- try(doit(x), TRUE)
## End(Not run)
unlist(res[sapply(res, function(x) !inherits(x, "try-error"))])

[Package _base_ version 4.6.0 Index]