r emacs org-mode

Usando org-mode para estructurar un análisis



emacs (2)

Me di cuenta de. Del manual de la organización:

El argumento encabezado: eval se puede usar para limitar la evaluación de bloques de código específicos. : eval acepta dos argumentos "nunca" y "consulta". : eval nunca se asegurará de que un bloque de código nunca se evalúe, esto puede ser útil para protegerse contra la evaluación de bloques de código peligrosos. : la consulta eval requerirá una consulta para cada ejecución de un bloque de código independientemente del valor de la variable org-confirm-babel-eval.

Así que solo hay que añadir

: eval nunca

a la cabecera de los bloques que no quieres ejecutar, y voilá!

Estoy tratando de hacer un mejor uso de org-mode para mis proyectos. Creo que la programación alfabetizada es especialmente aplicable al ámbito del análisis de datos y org-mode nos permite realizar una programación literaria bastante impresionante.

Creo que la mayoría de ustedes estará de acuerdo conmigo en que el flujo de trabajo para escribir un análisis es diferente a la mayoría de los otros tipos de programación. No solo escribo un programa, exploro los datos. Y, aunque muchas de estas exploraciones son callejones sin salida, no quiero eliminarlas / ignorarlas por completo. Simplemente no quiero volver a ejecutarlos cada vez que ejecuto el archivo org. También tiendo a encontrar o desarrollar fragmentos de código útil que me gustaría poner en una plantilla analítica, pero algunos de estos fragmentos no serán relevantes para cada proyecto y me gustaría saber cómo hacer que org-mode ignore estos trozos cuando estoy ejecutando todo el búfer. Aquí hay un ejemplo simplificado.

* Import - I want org-mode to ignore import-sql. #+srcname: import-data #+begin_src R :exports none :noweb yes <<import-csv>> #+end_src #+srcname: import-csv #+begin_src R :exports none data <- read.csv("foo-clean.csv") #+end_src #+srcname: import-sql #+begin_src R :exports none library(RSQLite) blah blah blah #+end_src * Clean - This is run on foo.csv, producing foo-clean.csv - Fixes the mess of -9 and -13 to NA for my sanity. - This only needs to be run once, and after that, reference. - How can I tell org-mode to skip this? #+srcname: clean-csv #+begin_src sh :exports none sed ..... #+end_src * Explore ** Explore by a factor (1) - Dead end. Did not pan out. Ignore. - Produces a couple of charts showing there is not interaction. #+srcname: explore-by-a-factor-1 #+begin_src R :exports none :noweb yes #+end_src ** Explore by a factor (2) - A useful exploration that I will reference later in a report. - Produces a couple of charts showing the interaction of my variables. #+srcname: explore-by-a-factor-2 #+begin_src R :exports none :noweb yes #+end_src

Me gustaría poder usar org-babel-execute-buffer y tener org-mode de alguna manera para omitir los bloques de código import-sql, clean-csv y explore-by-a-factor-1. Los quiero en el archivo org, porque son relevantes para el proyecto. Después de todo, mañana alguien podría querer saber por qué estaba tan seguro de que explorar por factor 1 no era útil. Quiero mantener ese código a mi alrededor, así puedo bloquear la trama o el análisis o lo que sea, y continuar, pero no ejecutarlo cada vez que lo ejecuto todo porque no hay razón para ejecutarlo. Lo mismo ocurre con las cosas limpias csv. Lo quiero para documentar lo que hice con los datos (y por qué), pero no quiero volver a ejecutarlos cada vez. Solo importaré foo-clean.csv.

Busqué en Google por todo esto y leí un montón de archivos de listas de correo en modo org y pude encontrar un par de ideas, pero no lo que quiero. EXPORT_SELECT_TAGS, EXPORT_EXCLUDE_TAGS son excelentes, al exportar el archivo. Y el encabezado: enredo funciona bien, al crear los archivos de origen reales. No quiero hacer nada de esto. Solo quiero ejecutar el buffer. Me gustaría poder definir bloques de código de manera similar para ser ejecutados o ignorados. Supongo que me gustaría encontrar una manera de tener una variable de organización como:

EJECUTAR_SELECTO_TAGS

De esta manera simplemente podría etiquetar mis varios bloques de código y terminar con eso. Sería aún mejor si pudiera ejecutar el archivo, utilizando solo bloques de origen con etiquetas específicas. No puedo encontrar una manera de hacer esto y pensé que lo haría antes de pedir / pedir una nueva característica en modo org.


Si bien nunca obtuve una respuesta a mi pregunta, la discusión fue interesante y, aparentemente, una Plantilla para R basada en modo de organización parece ser una idea interesante para algunas personas. Descargué el código fuente a org-mode y miré org-babel-execute-buffer. Es, como temía, una función ingenua que hace precisamente lo que dice que hace y nada más. No es posible (actualmente) pasarle ningún parámetro adicional para afectar su comportamiento. (A menos que esté mal interpretando mal el lisp, que es totalmente posible.)

Finalmente, decidí que org-babel-execute-buffer no es necesario para un sistema de plantillas R útil. La funcionalidad de Babel noweb es realmente flexible y creo que es posible construir una solución viable utilizando noweb, en lugar de intentar desarrollar un esquema de etiquetado complejo para definir cómo / cuándo ejecutar las cosas.

Para el enredo / exportación, todavía debería ser posible usar etiquetas para crear una salida usable / sane.

Para cualquiera que esté interesado: LiterateR

Es probable que sea un poco grosero usar este hilo para ponerlo por ahí, pero esta es la razón por la que hice la pregunta en primer lugar. TemplateR es mi intento de hacer que R sea un poco más fácil de usar. En este momento es solo una plantilla con dos funciones simplistas. Considero que es una prueba de concepto en este punto. Eventualmente, quiero desarrollar algo que haga más para ayudar a las personas a desarrollar proyectos R más rápidamente. TemplateR logrará esto al: 1. Proporcionar una estructura sólida para desarrollar. 2. Proporcionar una función incorporada para proporcionar soporte para tareas comunes, especialmente en el ámbito de la investigación reproducible. 3. Proporcione fragmentos de código probado que se puedan volver a utilizar rápidamente para el proyecto actual.

En este momento, todo lo que proporciona es una estructura / marco básico y dos funciones simples. 1. Identifique qué paquetes de R faltan (según lo que se ingresa manualmente en una tabla) y 2. Crea directorios de proyectos (gráficos, datos, informes).

Más vendrán en futuras versiones. El README.org y TODO.org se detallan más.