2009-09-15 13 views
8

Mi chiedevo se qualcuno sapeva di un buon modo per ottenere R o ESS per interrompere l'esecuzione del resto del codice oltre il punto in cui si verifica un errore se sto valutando una regione o un buffer (I Ho trovato solo la richiesta opposta negli archivi di aiuto). Stavo cercando nei file della guida di R, ma option(error=stop) interromperà l'esecuzione della funzione o dell'istruzione offensiva, ma non quelli che la seguono. Grazie!Arresto forzato o interruzione per errore

risposta

2

? Break

Solo per te sei fuori dal giro.

? Provare

consente di impostare il codice che potrebbe non riuscire e con grazia recuperare.

+0

Grazie, ma quando si lavora in modo interattivo Non voglio per avvolgere la linea o la regione in prova() o tryCatch() ogni volta, ma suppongo che sarebbe tecnicamente farlo ... – hatmatrix

+0

Ciao crippledlambda. Hai trovato una soluzione per il tuo problema nel frattempo? – giordano

4

According to the ESS manual, questo dovrebbe funzionare: C-c C-c (COMINT-interrupt-subjob) manda un segnale Control-C al processo ESS. Questo ha l'effetto di interrompere il comando corrente.

John Fox ha un sito Web in cui offre una configurazione per ESS. In esso, ha questa funzione:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

Si dovrebbe essere in grado di aggiungere questa funzione al menu in XEmacs utilizzando:

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

Si potrebbe controllare il resto del suo file di configurazione e la documentazione a vedi se ti interessa. Non ho ancora provato questo, ma spero che funzioni per te!

Charlie

+0

Grazie Charlie - Ho familiarità con Cc Cc ma questo è per manualmente interrompere un processo in corso, a prescindere dagli errori (a quanto ho capito) .possero esaminare la modifica di eval-region o eval-buffer per chiamare questa funzione quando si verifica un errore ... – hatmatrix

11

Se R/ESS sta intasando il tempo di calcolo così tanto che i tuoi emacs/ESS non risponde a C-c C-c, è anche possibile salvarlo inviando un segnale di interruzione dal terminale.

Primo: individuare il processID di R utilizzando top o ps. (Il mio era 98490 Poi: kill -2 98490 che trasmette un segnale di allarme e si ottiene il/Emacs e R sessione ESS indietro

Problemi correlati