¿Cómo puedo respaldar el proceso R en ESS / Emacs?


A menudo corro largos scripts R cuando inicio mi entorno R. Me gustaría poder cargar / ejecutar el script R en Emacs / ESS y continuar otros trabajos en otro buffer.

Cuando presiono C-g o C-c C-c el proceso se interrumpe, y debo reiniciar el script.

¿Cuál es la mejor manera de respaldar el proceso R en ESS / Emacs?

EDITAR: Gracias por sus respuestas y comentarios, pero ninguno de ellos aborda el hecho de que Emacs se congela cuando carga / ejecuta un script grande y no puedes cambiar buffer.

Supongo que mi pregunta es un poco más general: ¿puede Emacs respaldar un proceso que le permita seguir trabajando?

 25
Author: skaffman, 2010-05-05

3 answers

ESS ejecuta R como proceso asíncrono. No necesitas antecedentes. Puede ejecutar su código durante horas y seguir trabajando en ESS sin interrupciones.

Su problema parece ser otra cosa. Cuando ejecuta su script, lo hace "visiblemente", es decir, el código ejecutado se imprime en el terminal. Esto causa que Emacs se congele.

Establezca ess-eval-visibly en cero y grandes trozos de código se enviarán a R instantáneamente:

(setq ess-eval-visibly nil)

Saludos.

[actualización]

Hay una nueva configuración para ess-eval-visibply en versiones recientes de ESS - 'nowait. Coloca su código en un búfer inferior y luego lo envía al subproceso. De esta manera puede ver su código y toda la salida después sin esperar a que termine el subproceso.

[/update]

 19
Author: VitoshKa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-25 09:07:21

M-x R iniciará una sesión R (el nombre predeterminado del búfer es *R*). Si vuelve a presionar M-x R, se iniciará una segunda sesión de R (con el nombre del búfer *R:2*).

Cada sesión tiene su propio proceso R, por lo que puede ejecutar un script R largo en una y seguir utilizando la otra de forma independiente.

Al presionar C-x C-b aparece la lista de búfer, que le permitiría cambiar entre R sesiones.

O, si pones

(global-set-key "\C-cr" 'ess-request-a-process)

En su archivo de inicialización .emacs, luego cada vez que presione C-c r se le preguntará a qué sesión de R (búfer) desea cambiar. Si solo tiene una sesión, cambiará allí automáticamente.

 3
Author: unutbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 12:15:36

En mi experiencia personal, ESS no es muy bueno manejando scripts muy grandes, ya que a veces el resto de Emacs se vuelve inutilizable. Tal vez sea mejor hacer el desarrollo en ESS, luego ejecutar el script completo en modo BATCH.

 -1
Author: stevejb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-06 05:26:05