Pregunta

Me encanta la combinación Emacs ESS. Me encanta enviar líneas, funciones, regiones y buffers de código a la línea de comando para su evaluación sin usar el mouse.

Sin embargo, he notado que el comando Eval Function en Emacs es mucho más lento que simplemente ejecutar source (" fns.R ") , donde fns.R es el archivo que contiene la función que quiero evaluar.

¿Por qué es este el caso?

¿Fue útil?

Solución

Creo que la gente de lista de ensayos tiene mejores respuestas para usted. Pero si evalúa invisiblemente, el procesamiento es mucho más rápido. Intente poner esto en su archivo .emacs:

(setq ess-eval-visibly-p nil)

Otros consejos

Solo estoy adivinando, pero cuando dices

  • fuente (" fns.R ") usted no está involucrando a Emacs / ESS en absoluto y el tiempo de computación es solo el tiempo que R necesita para sorber el archivo y digerirlo - probablemente muy poco, mientras que

  • Eval Function pasa una región al intérprete de Emacs que tiene que enviarla (presumiblemente línea por línea) al motor R que luego la digiere poco a poco.

y eso haría que el segundo enfoque fuera más lento.

Sin embargo, en el gran esquema de las cosas, ¿a quién le importa? A menudo envío buffers enteros o regiones grandes, ¿y eso lleva quizás una gran parte de un segundo? Todavía pienso, tal como usted dice, que la capacidad del editor (rico) y el lenguaje subyacente para interactuar de esa manera es algo extremadamente poderoso.

Felicitaciones a los hackers de Emacs y al equipo de ESS.

Si desea ejecutar todo su búfer, si está en Unix / Linux, también puede comenzar su script con un shebang:

#!/usr/bin/Rscript

Y haz que tu archivo sea ejecutable

chmod 744 myscript.r

(recuerdo haber leído que a Google le gusta que sus scripts r terminen en .R pero bueno ...) y puedes ejecutarlo de esta manera:

./myscript.r

Y, con argumentos,

./myscript.r arg1 arg2

(que realmente he usado para invocar una función R desde una llamada al sistema Matlab) y en su archivo R puede usar

userargs = tail(commandArgs(),2) 

para obtener arg1 y arg2. También puedes prescindir del shebang:

R --no-save < myscript.r arg1 arg2

y así sucesivamente. Con Windows recuerdo que era

R CMD BATCH myscript.r

o algo por el estilo ... Noté un pequeño retraso al ejecutar comandos a través de ESS (aunque me encanta ESS caro ) así que cuando sé que quiero ejecutar todo el búfer I a veces, inicie un shell en una ventana debajo del script R (donde residiría normalmente el búfer R) y use los trucos anteriores.

También puedes usar

echo 'source("myscript.r")' | R --no-save

también: el beneficio de usar estos métodos sobre la ejecución de 'source (" myscript.r ")' directamente en R o en un búfer R es que está comenzando con un espacio de trabajo claro (aunque debe tener cuidado de que su .Rprofile no se cargará a menos que llame 'source (" ~ / .Rscript ")' explícitamente en 'myscript.r') para que pueda estar seguro de que su script es autónomo (llama a las bibliotecas adecuadas, su léxico funciones con ámbito no hacen referencia a variables no deseadas en el espacio global que olvidó eliminar, etc.).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top