[R] A question on generating Error message upon Timeout

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat May 11 15:33:20 CEST 2019


Hello,

This solution works but when I've tried it, I realized it depends on the 
locale. In mine, pt_PT.UTF-8, the error message is in Portuguese and it 
failed. So I have two suggestions.

1) grep "Sys.sleep" in attr(n_Try, "condition")
2) not related but instead of length(grep(.)) > 0, logical grepl is simpler.

So the second 'if' in the function would become

if (grepl("Sys.sleep", attr(n_Try, "condition")) )

And now everything is Ok.

Hope this helps,

Rui Barradas

Às 11:57 de 11/05/19, Eric Berger escreveu:
> Hi Christofer,
> You have a number of misunderstandings.
> The first thing you could have tried in order to figure out what was going
> on was to remove the 'silent=TRUE' from the call to try().
> This would then give you extra information, specifically that there was a
> timeout. The exact message that gets printed on the call myFn(1) is
> 'Error in Sys.sleep(10) : reached elapsed time limit'
> This confirms that your timeout condition is met, but that the error is
> caught by the try() within myFn().
> The class of the error is "try-error", the same as the class of the error
> generated by the stop() statement, so the condition
> if ( class(n_Try) == 'try-error' ) does not differentiate between the two
> cases. You could modify the definition of myFn() with something like:
> 
>   myFn = function(n) {
>      n_Try = try({
>        if (n == 1) {Sys.sleep(10); Res = -123}
>        if (n == 2) stop()
>        if (n > 2) Res = 1:5
>      })  #, silent = FALSE)
>      if (class(n_Try) == "try-error") {
>        if ( length(grep("reached elapsed time limit",n_Try)) > 0 )
>           return("ERROR: Timeout")
>        else
>          return("ERROR : Good Error.")
>      } else {
>        return(Res)
>      }
>    }
> 
> HTH,
> Eric
> 
> 
> On Thu, May 9, 2019 at 10:37 PM Christofer Bogaso <
> bogaso.christofer using gmail.com> wrote:
> 
>> Hi,
>>
>> I have created a function called myFn() which should be acting as below:
>>
>> 1. If function takes too long, then it will timeout and a specific message
>> will be displayed
>> 2. This function may generate error on its own, so if it evaluates before
>> that specific time and fails then another specific message will be
>> displayed
>> 3. Within that specific time, if that function successfully run then the
>> result will be displayed.
>>
>> To implement above strategy my function is as follows:
>>
>>
>> *library(R.utils)*
>> *myFn = function(n) {*
>> * n_Try = try({*
>> * if (n == 1) {Sys.sleep(10); Res = -123}*
>> * if (n == 2) stop()*
>> * if (n > 2) Res = 1:5 *
>> * }, silent = TRUE)*
>> * if (class(n_Try) == 'try-error') {*
>> * return("ERROR : Good Error.")*
>> * } else {*
>> * return(Res)*
>> * }*
>> * }*
>>
>> Below is for case #1
>>
>> *aa = *
>> *tryCatch({*
>> *  res <- withTimeout({*
>> *    myFn(1)*
>> *  }, timeout = 2, onTimeout = 'error')*
>> *}, error = function(ex) {*
>> *  ("Timeout Error")*
>> *}); aa*
>>
>> I was expecting to get the expression for *aa* as *"Timeout Error"*,
>> however I am getting *"ERROR : Good Error."*. This is not going with my
>> plan
>>
>> Also, I dont think this function getting timeout just after 2 sec, appears
>> like it is evaluating for longer time
>>
>> However for *myFn(2)*, I am getting right message as "*"ERROR : Good
>> Error."*"
>>
>> *aa = *
>> *tryCatch({*
>> *  res <- withTimeout({*
>> *    myFn(2)*
>> *  }, timeout = 2, onTimeout = 'error')*
>> *}, error = function(ex) {*
>> *  ("Timeout Error")*
>> *}); aa*
>>
>> So clearly my strategy is failing for *myFn(1)*. Any pointer where I was
>> wrong?
>>
>>          [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using 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.
>>
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using 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.
>



More information about the R-help mailing list