[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