How do I stop/end/halt a script in R?

RHA picture RHA · Jan 14, 2016 · Viewed 39k times · Source

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

Answer

NonoRbrico picture NonoRbrico · May 17, 2018

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!