I wrote a script that should stop execution if the supplied data is incorrect. However, although stop
produces an error message, the script just continues. A minimal example:
if (TRUE) {stop("End of script?")} #It should stop here
print("Script did NOT end!") # but it doesn't, because this line is printed!
Console output:
> if (TRUE) {stop("End of script?")}
Error: End of script?
> print("Script did NOT end!")
[1] "Script did NOT end!"
>
This is actually not surprising, because from ?stop
:
stops execution of the current expression and executes an error action.
So it only ends the current expression, not the script. I have found here that you can wrap {} around the total script (or put it in a function), but that seems rather a workaround than a solution. Off course, it is good programming practice to catch error and handle them off yourself (see for example the link in comment from mra68), but I would still like to know if I can stop a script in R.
I have also tried return
and break
, but this only works in a function or loop. I searched for other possible keywords like "halt" and "end", but no luck. I am feeling a bit stupid, because it seems a very basic question.
So, is there a command that can make my script halt/stop/end with a fatal error ?
I am running R 3.2.3 on Windows 8, but had the same problem with R 3.0.1 at MAC-OSX.
> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Dutch_Netherlands.1252 LC_CTYPE=Dutch_Netherlands.1252 LC_MONETARY=Dutch_Netherlands.1252
[4] LC_NUMERIC=C LC_TIME=Dutch_Netherlands.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.2.3
TEST ON MAC-OS, sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] nl_NL.UTF-8/nl_NL.UTF-8/nl_NL.UTF-8/C/nl_NL.UTF-8/nl_NL.UTF-8
If you're using R from the command line instead of from within RStudio, you need to use Ctrl + C instead of Esc to cancel the command.
The stop R function generates an error message and stops executing the current R code.
maybe it is a bit too late, but I recently faced the same issue and find that the simplest solution for me was to use:
quit(save="ask")
From ?quit
you can see that:
save must be one of "no", "yes", "ask" or "default". In the first case the workspace is not saved, in the second it is saved and in the third the user is prompted and can also decide not to quit. The default is to ask in interactive use but may be overridden by command-line arguments (which must be supplied in non-interactive use).
You can then decide not to quit R by clicking on "cancel" when the message box pops-up.
Hope that helps!
As far as I could find, there is no single command that really stops a script on every platform/version. There are several ways to handle this:
Put it in a function or curly brackets:
{
if (TRUE) {stop("The value is TRUE, so the script must end here")}
print("Script did NOT end!")
}
OR evaluate the error and handle it like in an if else construction:
if (TRUE) {stop("The value is TRUE, so the script must end here")
} else { #continue the script
print("Script did NOT end!")
}
OR (EDIT):
Another possibility is to call the script from a seperate 'main' R-scipt, with source("MyScript.R")
. Then the script terminates. This however, suppresses all output other then errors to the console.
OR for more complex operations, use tryCatch()
as shown here
Very simple: call a function that has not been declared:
condition <- TRUE
if (condition) {
print('Reason for stopping')
UNDECLARED()
}
And the script will stop with the messages:
[1] "Reason for stopping"
Error in UNDECLARED() : could not find function "UNDECLARED"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With