Arrêter un programme R sans erreur

Est-il possible d'arrêter un programme R sans erreur?

par exemple j'ai une grande source, définissant plusieurs fonctions et après il y a quelques appels aux fonctions. Il arrive que je modifie une fonction, et que je souhaite que les définitions de fonction soient mises à jour dans l'environnement R, mais elles ne sont pas réellement appelées.

j'ai défini une variable justUpdate et quand il est TRUE vous voulez arrêter le programme juste après les définitions de fonction.

ReadInput <- function(...) ...
Analyze <- function(...) ...
WriteOutput <- function(...) ...

if (justUpdate)
    stop()
# main body
x <- ReadInput()
y <- Analyze(x)
WriteOutput(y)

je ont appelé stop() fonction, mais le problème est qu'il imprime un message d'erreur.

ctrl+ c est une autre option, mais je veux arrêter la source en ligne spécifique.

Le problème q() ou quit() c'est qu'il se termine R session, mais je voudrais avoir le R de la session reste ouverte.

@JoshuaUlrich proposé browser() peut être une autre option, mais pas parfaite, car la source se termine par une nouvelle environnement (c'est-à-dire que L'invite R passera à Browser[1]> plutôt que >). Néanmoins, on peut appuyer sur Q pour arrêter, mais je cherche la voie directe.

une Autre option est d'utiliser if (! justUpdate) { main body } mais ça élimine le problème, pas le résoudre.

Est-il une meilleure solution?

18
demandé sur Mogsdad 2013-01-23 02:50:07

5 réponses

Vous cherchez la fonction browser.

7
répondu Joshua Ulrich 2013-01-22 22:53:23

Il y a une bonne solution dans une liste de diffusion ici qui définit un stopQuietly la fonction que, fondamentalement masque l'erreur affiché à partir de la stop fonction:

stopQuietly <- function(...) {
  blankMsg <- sprintf("\r%s\r", paste(rep(" ", getOption("width")-1L), collapse=" "));
  stop(simpleError(blankMsg));
} # stopQuietly()

> stopQuietly()
7
répondu Vangelis Tasoulas 2015-11-25 12:01:44

je l'ai trouvé plutôt soignée solution ici. Le truc est d'éteindre tous les messages d'erreur juste avant d'appeler stop(). La fonction on.exit() est utilisé pour s'assurer que les messages d'erreur sont rallumés après coup. La fonction ressemble à ceci:

stop_quietly <- function() {
  opt <- options(show.error.messages = FALSE)
  on.exit(options(opt))
  stop()
}

la première ligne éteint les messages d'erreur et stocke l'ancien paramètre à la variable opt. Après cette ligne, toute erreur qui se produit ne produira pas de message et par conséquent, aussi stop() ne causera aucune message à imprimer.

selon le R help,

on.exit enregistre l'expression donnée comme argument comme devant être exécutée lorsque la fonction courante sort.

la fonction courante est stop_quietly() et il sort quand stop() est appelée. Donc la dernière chose que le programme ne fait qu'appeler options(opt) qui mettra show.error.messages à la valeur qu'il avait, avant stop_quietly() a été appelé (sans doute, mais pas nécessairement, TRUE).

6
répondu Stibu 2017-03-22 07:29:14

j'ai un problème similaire et, basé sur la réponse de @VangelisTasoulas, j'ai une solution simple.

À l'intérieur des fonctions, je dois vérifier si DB est mis à jour. Si elle n'est pas, arrêter l'exécution.

r=readline(prompt="Is DB updated?(y/n)")
Is DB updated?(y/n)n
if(r != 'y') stop('\r Update DB')
Update DB

il suffit de le mettre \r au début du message, remplacer Error: dans le message.

3
répondu xm1 2017-06-12 21:44:46

Vous pouvez utiliser la solution suivante pour arrêter un programme R sans erreur:

if (justUpdate)
    return(cat(".. Your Message .. "))
0
répondu Tammam Raweh Ali 2018-08-25 02:32:56