[R] need help with withRestarts ?
Martin Morgan
mtmorgan at fredhutch.org
Sun Dec 7 02:22:18 CET 2014
On 12/06/2014 02:53 PM, ce wrote:
> Dear all,
>
> Let's say I have this script , below. tryCatch indeed catches the error but exists, I want function to continue and stay in the loop. I found very examples of withRestarts on internet to figure it out. Could you help me how to do it ?
>
>
> myfunc <- function()
> {
> while(1)
> {
> x <- runif(1)
> if ( x > 0.3 ) a <- x/2 else a <- x/"b"
> print(a)
> Sys.sleep(1)
> }
> }
Hi --
Modify your function so that the code that you'd like to restart after is
surrounded with withRestarts(), and with a handler that performs the action
you'd like, so
myfunc <- function()
{
while(TRUE)
{
x <- runif(1)
withRestarts({
if ( x > 0.3 ) a <- x/2 else a <- x/"b"
print(a)
}, restartLoop = function() {
message("restarting")
NULL
})
Sys.sleep(1)
}
}
Instead of using tryCatch(), which returns to the top level context to evaluate
the handlers, use withCallingHandlers(), which retains the calling context.
Write a handler that invokes the restart
withCallingHandlers({
myfunc()
}, error = function(e) {
message("error")
invokeRestart("restartLoop")
})
It's interesting that tryCatch is usually used with errors (because errors are
hard to recover from), and withCallingHandlers are usually used with warnings
(because warnings can usually be recovered from), but tryCatch() and
withCallingHandlers() can be used with any condition.
Martin
>
> tryCatch({ myfunc() },
> warning = function(w) { print("warning") },
> error = function(e) { print("error") },
> finally = { print("end") }
> )
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-help
mailing list