Guarde los diferentes scripts con git (parece excesivo)
Vaya. Hice una doble toma al leer esto: 1 es el opuesto de overkill.
La versión que controla sus scripts (usando Git o algo similar) es el mínimo absoluto, y debería volverse completamente automático. Para cada nuevo proyecto que comienzo, uno de los primeros pasos es emitir el comando git init
y configurar un repositorio remoto (en Github).
Para realizar un seguimiento de análisis diferentes, utilizo una combinación de los siguientes enfoques:
- Escribir funciones / scripts reutilizables y parametrizar. Los parámetros se mantienen dentro del propio script (que luego llama repetidamente a la función relevante) o en un Makefile (recomiendo Snakemake).
- Documente los enfoques de análisis alternativos; una vez más, esto podría ser un Makefile con diferentes reglas para análisis alternativos, o un conjunto de cuadernos (vía R Markdown).
- Tener diferentes ramas de Git para enfoques mutuamente excluyentes. Al final del análisis, una de estas ramas se fusiona en
master
y se publica. Si quiero publicar varios enfoques de análisis, fusiono todas estas ramas en master
y uso los enfoques (1) o (2) los habilito simultáneamente.
En de hecho, recomiendo crear un Makefile para cada análisis; He descubierto que esta es la forma más práctica y autodocumentada de ejecutar un análisis. Se parece más a un cuaderno de laboratorio de laboratorio húmedo. La ventaja sobre un solo documento de R Markdown es que volver a ejecutar solo partes del análisis puede automatizarse por completo, y las dependencias en el flujo de trabajo son evidentes a partir de las dependencias de las reglas de Makefile. Esto es mucho más difícil en R Markdown.
Hace algún tiempo creé un flujo de trabajo de análisis de ejemplo para mostrar cómo se puede estructurar. Hoy en día usaría Snakemake en lugar de GNU make.
En cuanto a su otro punto:
Tome notas en el propio script
Las "notas" son bestias peligrosas: la documentación es importante, pero la experiencia muestra que a veces es muy difícil mantener la documentación sincronizada con el código. No existe ningún mecanismo que garantice que la documentación y el código coincidan. Las diferencias entre el análisis presunto y el análisis realmente ejecutado pueden volverse muy problemáticas.
Por lo tanto, la gente prefiere usar código autodocumentado tanto como sea posible; es decir: escribir código para que su significado sea inmediatamente claro, sin comentarios, incluso para alguien que no haya trabajado antes en el código. Hacer esto bien es difícil y requiere práctica, pero mejora la calidad general del código. Una vez más, usar un Makefile ayuda aquí porque las dependencias entre las reglas autodocumentan el tipo de análisis que se realizó.
Jeff Atwood ha escrito dos ensayos fundamentales sobre este tema:
Son dos de los mejores consejos sobre programación que puedo dar.
1 Para enfatizar: echa un vistazo al historial de ediciones de esta respuesta.