2009-09-15 20 views
8

Me preguntaba si alguien sabía de una buena manera de hacer que R o ESS dejaran de ejecutar el resto del código más allá del punto en el que ocurre un error si estoy evaluando una región o un buffer (I solo encontré la solicitud opuesta en los archivos de ayuda). Estaba buscando en los archivos de ayuda R pero option(error=stop) solo detendrá la ejecución de la función o declaración ofensiva, pero no de los que la siguen. ¡Gracias!Forzar detención o detención por error

Respuesta

2

? Break

Solo lo saca del ciclo.

? Tratar

le permite configurar el código que podría fallar y con gracia recuperarse.

+0

Gracias, pero cuando se trabaja de forma interactiva que no quieren poner la línea o región en la prueba() o tryCatch() cada vez, pero supongo que técnicamente lo haría ... – hatmatrix

+0

Hola lisiado. ¿Encontraste una solución para tu problema mientras tanto? – giordano

4

According to the ESS manual, esto debería funcionar: C-c C-c (comint-interrupción-subtrabajo) envía una señal Control-C al proceso de ESS. Esto tiene el efecto de abortar el comando actual.

John Fox tiene un sitio web donde ofrece una configuración para ESS. En ella, él tiene esta función:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

Usted debe ser capaz de añadir esta función para el menú en XEmacs usando:

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

debes revisar el resto de su archivo de configuración y documentación para mira si te interesa. No he intentado esto todavía, ¡pero espero que te funcione!

Charlie

+0

Gracias Charlie - Estoy familiarizado con Cc Cc pero esto es de forma manual deteniendo un proceso en progreso, independientemente de los errores (tal como lo entiendo). Puedo buscar la modificación de eval-region o eval-buffer para llamar a esta función cuando se produce un error ... – hatmatrix

11

Si R/ESS está acaparando tanto tiempo de cómputo que sus emacs/ESS ésta no responde a C-C C-C, también se puede ahorrar mediante el envío de una señal de interrupción de la terminal.

Primero: descubra el ID de proceso R usando top o ps. (La mía era 98490 continuación: kill -2 98490 que envía una señal de interrupción y se obtiene el ESS/Emacs y R sesión posterior

Cuestiones relacionadas