2009-09-15 5 views
8

Ich frage mich, ob jemand einen guten Weg kannte, um R oder ESS dazu zu bringen, den Rest des Codes über den Punkt hinaus auszuführen, an dem ein Fehler auftritt, wenn ich eine Region oder einen Puffer auswerte habe nur die gegenteilige Anfrage in den Hilfearchiven gefunden. Ich habe in den R Hilfedateien gesucht, aber option(error=stop) stoppt nur die Ausführung der fehlerhaften Funktion oder Anweisung, aber nicht die folgenden. Vielen Dank!Stop oder Halt bei Fehler erzwingen

Antwort

2

? Break

Nur bekommen Sie aus der Schleife.

? Versuchen

Hier können Sie Code einrichten, und anmutig erholen scheitern könnte.

+0

Danke, aber bei der Arbeit interaktiv will ich nicht, die Linie oder Region in Versuch wickeln() oder tryCatch() jedes Mal, aber ich nehme an, das würde es technisch tun ... – hatmatrix

+0

Hallo crippledlambda Hast du in der Zwischenzeit eine Lösung für dein Problem gefunden? – giordano

4

According to the ESS manual, sollte diese Arbeit: C-c C-c (comint-Interrupt-Subjob) Sendet ein Control-C Signal an den Prozess ESS. Dies hat den Effekt, dass der aktuelle Befehl abgebrochen wird.

John Fox hat eine Website, auf der er eine Konfiguration für ESS anbietet. Darin hat er diese Funktion:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

sollten Sie in der Lage sein, diese Funktion in das Menü in XEmacs hinzufügen mit:

(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) 

Sie könnten den Rest seiner Konfigurationsdatei überprüfen und Dokumentation sehen Sie, ob es Sie interessiert. Ich habe das noch nicht ausprobiert, aber ich hoffe, dass es für dich funktioniert!

Charlie

+0

Danke Charlie - ich kenne Cc Cc aber das ist für manuell stoppe einen laufenden Prozess, unabhängig von Fehlern (wie ich es verstehe). Ich kann überprüfen, eval-Region oder eval-Puffer zu ändern, um diese Funktion aufzurufen, wenn ein Fehler auftritt ... – hatmatrix

11

Wenn R/ESS wird so viel Rechenzeit hogging, die Ihre Emacs/ESS C-c C-c nicht reagiert, können Sie es auch speichern ein Interrupt-Signal von dem Endgerät zu senden.

Zuerst: herauszufinden, R's ProzessID mit top oder ps. (Ich war 98.490 Dann: kill -2 98490 das ein Interrupt-Signal sendet und Sie erhalten Ihre ESS/Emacs und R-Sitzung zurück

Verwandte Themen