try {base} | R Documentation |
try
is a wrapper to run an expression that might fail and allow
the user's code to handle error-recovery.
try(expr, silent = FALSE,
outFile = getOption("try.outFile", default = stderr()))
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 |
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
connection unless
options("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 by
geterrmessage
. (This should not be needed as the value returned
in case of an error contains the error message.)
try
is implemented using tryCatch
; for
programming, instead of try(expr, silent = TRUE)
, something like
tryCatch(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()
, i.e.,
options(try.outFile = stdout())
instead of the default stderr()
,
notably when try()
is used inside a Sweave
code
chunk and the error message should appear in the resulting document.
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.
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(res, "try-error"))
instead.
options
for setting error handlers and suppressing the
printing of error messages;
geterrmessage
for retrieving the last error message.
The underlying tryCatch
provides more flexible means of
catching and handling errors.
assertCondition
in package tools is related and
useful for testing.
## 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"))])