try {base} | R Documentation

## Try an Expression Allowing Error Recovery

### 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)

### Arguments

`expr` | an R expression to try.
`silent` | logical: should the report of error messages be suppressed?

### Details

`try` evaluates an expression and traps any errors that occur during the evaluation. `try` establishes a handler for errors that uses the default error handling protocol. It also establishes a `tryRestart` restart that can be used by `invokeRestart`.

### Value

The value of the expression if `expr` is evaluated without error, but an invisible object of class `"try-error"` containing the error message if it fails. The normal error handling will print the same message unless `options("show.error.messages")` is false or the call includes `silent = TRUE`.

### See Also

`options` for setting error handlers and suppressing the printing of error messages; `geterrmessage` for retrieving the last error message. `tryCatch` provides another means of catching and handling errors.

### 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 <- 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 Contents]