Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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
like image 753
RHA Avatar asked Jan 14 '16 10:01

RHA


People also ask

How do you stop a code in R?

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.

What does stop () do in R?

The stop R function generates an error message and stops executing the current R code.


Video Answer


3 Answers

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!

like image 170
NonoRbrico Avatar answered Oct 23 '22 10:10

NonoRbrico


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

like image 36
RHA Avatar answered Oct 23 '22 10:10

RHA


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"
like image 2
while_for Avatar answered Oct 23 '22 10:10

while_for