[R] Hard Stop?
luke-tierney at uiowa.edu
luke-tierney at uiowa.edu
Fri Feb 8 00:52:06 CET 2013
There are 4 ways, other than generating a core dump :-), that could
fit your vague desctiption:
Call q("no"); this is the only way to avoid 'finally' expressions
in tryCatch if that is really what you want.
You can invoke an "abort" restart; there will be one established
by the intepreter, but there may be others. You can choose the
one you want programmatically. If you use the outer-most one
from the interpreter then what happens depends on whether R is
running interactively or not.
You can call stop() with a condition argument that is not an error
or a warning to avoid any handlers established by tryCatch or
withCallingHandlers to intercept warnings or errors. This will
drop down to stop's default handling of errors (i.e. print a
message and invoke the nearest "abort" restart).
You can capture an unevaluated return() call and evaluate it at
the point from which you want to escape. This is what callCC does,
and using callCC would be the recommended way to do this if this
is what you want.
[R's condition handling is based on Common Lisp's; a good reference
for that is
http://www.nhplace.com/kent/Papers/Condition-Handling-2001.html. Some
day there will be an R version of this document.]
What choice is appropriate depends on exactly what you want to have
happen after you execute your "Hard Stop" and whether you own, or need
to own, the code that receives the transfer of control initiated by
your 'Hard Stop".
Best,
luke
On Thu, 7 Feb 2013, Duncan Murdoch wrote:
> On 06/02/2013 8:33 PM, ivo welch wrote:
>> is it possible to throw a stop() that is so hard that it will escape
>> even tryCatch?
>
> You can signal a condition that is not an error, and if tryCatch hasn't been
> written to catch it, it will stop. For example,
>
> g <- function() {
> tryCatch(f(), error=function(e) NULL
> cat("Still running\n")
> }
>
> f <- function() stop("Regular error") # This won't stop g()
> g()
>
>
> f <- function() stop(simpleCondition("I mean it!")) # This will
> g()
>
> Of course, you can catch simpleConditions too if you try.
>
> Duncan Murdoch
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
--
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa Phone: 319-335-3386
Department of Statistics and Fax: 319-335-3017
Actuarial Science
241 Schaeffer Hall email: luke-tierney at uiowa.edu
Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
More information about the R-help
mailing list