2009-09-15 13 views
8

Je me demandais si quelqu'un connaissait un bon moyen d'obtenir R ou ESS pour arrêter l'exécution du reste du code au-delà du point où une erreur se produit si j'évalue une région ou un tampon (I J'ai seulement trouvé la demande contraire dans les archives d'aide). Je regardais dans les fichiers d'aide R, mais option(error=stop) arrêtera seulement l'exécution de la fonction ou de l'instruction incriminée, mais pas ceux qui la suivent. Merci!Forcer l'arrêt ou arrêter l'erreur

Répondre

2

? Break

Seulement vous sort de la boucle.

? Essayer

Permet de mettre en place un code qui peut échouer et rétablir leur fonctionnement normal.

+0

Merci, mais lorsque l'on travaille de manière interactive, je ne veux pas envelopper la ligne ou la région essayer() ou tryCatch() à chaque fois, mais je suppose que cela le ferait techniquement ... – hatmatrix

+0

Salut crippledlambda Avez-vous trouvé une solution pour votre problème en attendant? – giordano

4

According to the ESS manual, cela devrait fonctionner: C-c C-c (COMINT-interruption subjob) envoie un signal Control-C au processus ESS. Cela a pour effet d'annuler la commande en cours.

John Fox a un site Web où il propose une configuration pour ESS. Dans ce document, il a cette fonction:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

Vous devriez être en mesure d'ajouter cette fonction au menu XEmacs en utilisant:

(defun R-menu() 

    "Hook to install R menu and sub-menus" 

    (add-menu-item '("ESS" "R") "Interrupt computation" 'stop-R 
) 
) 
(add-hook 'ess-mode-hook 'R-menu) 

Vous pouvez vérifier le reste de son fichier de configuration et de documentation pour voyez si cela vous intéresse. Je n'ai pas encore essayé, mais j'espère que cela fonctionne pour vous!

Charlie

+0

Merci Charlie - Je suis familier avec Cc Cc mais c'est pour manuellement arrêt d'un processus en cours, sans tenir compte des erreurs (si je comprends bien) Je peux me pencher sur la modification de eval-region ou eval-buffer pour appeler cette fonction lorsqu'une erreur se produit ... – hatmatrix

11

Si R/ESS accapare tellement de temps de calcul que vos emacs/ESS ne répond pas à C-c C-c, vous pouvez aussi l'enregistrer en envoyant un signal d'interruption du terminal.

Premièrement: calculez l'ID de processus de R en utilisant top ou ps. (Le mien était 98490 Puis: kill -2 98490 qui envoie un signal d'interruption et vous obtenez votre ESS/Emacs et la session R Retour