Ho scritto uno script che dovrebbe interrompere l'esecuzione se i dati forniti non sono corretti. Tuttavia, anche se stop
produce un messaggio di errore, lo script continua solo. Un esempio minimo:Come posso interrompere/terminare/fermare uno script in R?
if (TRUE) {stop("End of script?")} #It should stop here
print("Script did NOT end!") # but it doesn't, because this line is printed!
uscita della console:
> if (TRUE) {stop("End of script?")}
Error: End of script?
> print("Script did NOT end!")
[1] "Script did NOT end!"
>
Questo non è in realtà sorprendente, perché da ?stop
:
stops execution of the current expression and executes an error action.
Così finisce solo l'espressione corrente, non lo script. Ho trovato here che puoi racchiudere {} attorno allo script totale (o inserirlo in una funzione), ma sembra una soluzione alternativa piuttosto che una soluzione. Ovviamente, è buona pratica di programmazione rilevare gli errori e gestirli da soli (vedere ad esempio il collegamento nel commento di mra68), ma mi piacerebbe comunque sapere se riesco a fermare uno script in R.
Ho ha anche provato return
e break
, ma funziona solo in una funzione o ciclo. Ho cercato altre possibili parole chiave come "halt" e "end", ma senza fortuna. Mi sento un po 'stupido, perché sembra una domanda molto semplice.
Quindi, esiste un comando che può arrestare/arrestare/terminare il mio script con un errore irreversibile?
Sto eseguendo R 3.2.3 su Windows 8, ma ho avuto lo stesso problema con R 3.0.1 su 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
PROVA SU 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
suggerisco, è mettere qualsiasi codice che si desidera eseguire in una funzione quindi chiamare tale funzione. Quindi puoi usare 'stop' e dovrebbe terminare la funzione in quel punto. L'istruzione della funzione in r può anche essere utilizzata per dichiarare metodi come in altri linguaggi di programmazione, che possono essere fuorvianti, suppongo. –
Sul mio sistema (R versione 3.2.3, sistema operativo Windows 7) "stop" ha interrotto lo script. Se si guarda il codice sorgente di "stop", si vede che il suo comportamento dipende da alcune funzioni interne e queste potrebbero essere dipendenti dalla macchina. – mra68
[Questo collegamento] (http://adv-r.had.co.nz/beyond-exception-handling.html) potrebbe essere utile. Ma se lo è, la domanda non è affatto di base. – mra68