2009-09-15 14 views
8

Zastanawiam się, czy ktoś wiedział o dobrym sposobie, aby R lub ESS przestał wykonywać resztę kodu poza punkt, w którym wystąpił błąd, jeśli oceniam region lub bufor (I "znalazłem tylko przeciwną prośbę w archiwach pomocy). Szukałem w plikach pomocniczych R, ale option(error=stop) przerwie tylko wykonywanie funkcji lub instrukcji, ale nie tych, które ją śledzą. Dzięki!Wymuszenie zatrzymania lub zatrzymanie w przypadku błędu

Odpowiedz

2

? Przerwa

Tylko wydostanie Cię z pętli.

? Spróbuj

Pozwala ustawić kod, który może zakończyć się niepowodzeniem i bezpiecznie odzyskać.

+0

Dzięki, ale podczas pracy interaktywnie Nie chcę, aby otoczyć linię lub region, w try() lub tryCatch() za każdym razem, ale myślę, że to by to technicznie zrobiło ... – hatmatrix

+0

Cześć crippledlambda, czy w międzyczasie znalazłeś rozwiązanie swojego problemu? – giordano

4

According to the ESS manual powinno to działać C-c C-c (COMINT-przerwaniami subjob) wysyła sygnał Control-C do procesu ESS. Ma to wpływ na przerwanie bieżącego polecenia.

John Fox ma stronę internetową, na której oferuje konfigurację dla ESS. W nim, że ma tę funkcję:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

Powinieneś móc dodać tę funkcję do menu w XEmacs używając:

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

Możecie sprawdzić resztę swojego pliku konfiguracyjnego i dokumentacji sprawdź, czy cię to interesuje. Nie próbowałem tego jeszcze, ale mam nadzieję, że to działa dla ciebie!

Charlie

+0

Dziękuję Charlie - znam Cc Cc ale to jest ręcznie zatrzymanie procesu w toku, niezależnie od błędów (jak rozumiem) .Może zajrzeć do modyfikacji eval-region lub eval-buffer, aby wywołać tę funkcję, gdy wystąpi błąd ... – hatmatrix

11

Jeśli R/ESS jest wyginanie się tyle czasu obliczeniową, że Emacs/ESS nie reaguje na C-C C-C, można również zapisać wysyłając sygnał przerwania od terminalu.

Po pierwsze: wymyślić identyfikator procesu R za pomocą top lub ps. (Kopalnia 98490 Następnie: kill -2 98490 który wysyła sygnał przerwania, a otrzymasz swój ESS/Emacs i R sesji z powrotem

Powiązane problemy