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]