Hi, I would like to bring up and old suggestion [http://tolstoy.newcastle.edu.au/R/devel/06/03/4512.html] of adding an exit condition, so that for instance it is possible to silently exit from scripts and Rd examples similar to return() for functions, e.g.
\examples{ require("foo") || exit("Example will not run without the 'foo' package.") ... } I know this can be solved by a simple if {require("foo")} { } statement, but the above is to avoid such nested code, especially in example code, cf. return() and break. Here are the details to get this working: 1. Define a new condition class similar to simpleWarning() and simpleError(): simpleExit <- function(...) { cond <- simpleCondition(...) class(cond) <- c("simpleExit", class(cond)) cond } 2. Setup a method to generate such a condition similar to warning() and stop(): exit <- function(...) { invisible(signalCondition(simpleExit(...))) } } 3. That is the basic framework. We can then use tryCatch() to catch and return upon a simpleExit as follows: evalWithExit <- function(...) { tryCatch(..., simpleExit=function(cond) cond) } } Then it is matter of flavor if one wants to update source() with an argument 'allowExits=FALSE' or have a standalone function: sourceWithExit <- function(...) { evalWithExit(source(...)) } 5. The code example() needs to be updated accordingly, i.e. replacing source() with sourceWithExit(). 6. src/scripts/check.in needs to updated so that the examples are sourced detecting simpleExit:s. Steps 1-4 can be added without side effects. It is Step 5 & 6 that needs extra care. I am happy to contribute the above if it would be accepted. Best, Henrik PS. As I queried on in my follow up of the March 2006 thread, if there is a way to signal user-interrupts programatically, all of the above is not necessary. DS. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel