Rev 9615 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{restart}\alias{restart}\alias{try}\title{Restart an Expression}\usage{restart(on = TRUE)try(expr, first = TRUE)}\arguments{\item{on}{if true a jump point is set; if false the jump point is removed}\item{expr}{an \R expression to try}\item{first}{not for user use!}}\description{\code{restart} performs a type of non-local return.\code{try} is a user-friendly wrapper to run an expression that might fail.}\details{When \code{restart} is called with \code{on = TRUE} the evaluator marks thatfunction as a return point. Any errors or signals (such as control-C onUnix) cause control to return to the start of the function containing thecall to \code{restart}. The most recently established function is alwaysentered first.}\value{\code{try} returns the value of the expression if it succeeds, and aninvisible object of class \code{"try-error"} containing the errormessage if it if fails. The normal error handling will print the samemessage unless \code{options("show.error.messages")} is false.}\note{The direct use of \code{restart} is likely to result in an infinite loop.Use \code{try} unless you are sure you know what you are doing.}\seealso{\code{\link{options}} for setting error handlers and suppressing theprinting of error messages;\code{\link{geterrmessage}} for retrieving the last error message.}\examples{## this example will not work correctly in example(try), but## it does work correctly if pasted inoptions(show.error.messages = FALSE)try(log("a"))print(.Last.value)options(show.error.messages = TRUE)## run a simulation, keep only 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")}options(show.error.messages = FALSE)## alternative 1res <- lapply(1:100, function(i) try(doit(x)))## alternative 2\dontrun{res <- vector("list", 100)for(i in 1:100) res[[i]] <- try(doit(x))}options(show.error.messages = TRUE)unlist(res[sapply(res, function(x) !inherits(x, "try-error"))])}\keyword{programming}