Gestión de proyectos en R

Muchos de mis lectores tienen, seguro, maneras distintas —y probablemente mejores— de organizar sus proyectos en R que yo. Pero me consta que a algunos les cuesta no convertir sus carpetas en un caos en los que sólo ellos se manejan —hasta que pasa el tiempo, se olvidan y tienen que volver sobre ello—. Para ellos, para sugerirles un procedimiento eficiente de trabajo, va esta entrada. En ella describo cómo organizo mis propios proyectos con R.

En primer lugar, creo un directorio exclusivo para el proyecto con un nombre específico que me permite identificar el quién, el cuándo y el qué. Dentro de él, creo otros cuatro:

  • doc, a donde va a parar toda la documentación pertinente
  • dat, que contiene los datos iniciales y, posiblemente, algunos obtenidos manualmente a partir de los primeros (me gusta convertir los ficheros de Excel en ceeseuves, por ejemplo)
  • src, que contiene mi código en R
  • res, donde almaceno los resultados finales o parciales (gráficos, informes, etc.)

Resulta fundamental que el proyecto esté autocontenido, que no se dependa de datos u objetos que residan en otra parte. Incluso si es necesario acceder a una base de datos, es conveniente guardar una copia de los ficheros con los que se cargó originalmente para poder volver a realizar la carga desde cero.

Cuando ejecuto R, siempre cambio el directorio de trabajo a src y cualquier llamada a código, datos o resultados la hago usando caminos relativos: siempre leo de ../dat/ y mando las salidas a ../dat/. ¿Os hacéis idea lo irritante que resulta recibir código de terceros con llamadas a ficheros en rutas tales como C:\\Mis Documentos\\Pepita\\Tesis de Pepi\\R nuevo\\New Folder\\...?

Dentro de src creo varios ficheros. Los suelo ordenar alfabéticamente usando números como prefijo. El primero siempre es 00_load.R, que lee los datos originales y sin ningún tipo de proceso los vuelca en un objeto de R que suelo llamar raw. Típicamente acabo con cuatro o cinco ficheros:

  • 00_load.R
  • 01_clean.R, para limpiar los datos; típicamente, este fichero suele crecer a lo largo del análisis
  • 02_eda.R, para en análisis exploratorio y gráfico
  • 03_analysis_cca.R, por ejemplo
  • 04_analysis_reg.R, …

Todos los ficheros, menos obviamente 00_load.R dependen únicamente o del objeto raw o del que se genera en 01_clean.R. Y típicamente, en la primera línea de cada fichero copio raw en dat, el conjunto de datos con el que trabajo, para asegurarme de que nunca nadie modifica raw.

Es fundamental trabajar de tal manera que cambios en un fichero no tengan efectos secundarios en un análisis que se efectúa aguas abajo y de manera que si se ejecutan todos los ficheros de código en sucesión obtengo los mismos resultados que cuando lo hago por separado.

Cuando mi proyecto acaba, comprimo el directorio raíz y lo archivo.

Con un mínimo de orden, buenos comentarios, encabezamientos en los ficheros (¡de inestimable ayuda!) es posible volver a generar resultados o a correr el código sobre nuevos ficheros de datos con un esfuerzo mínimo.

6 comentarios sobre “Gestión de proyectos en R

  1. Gregorio R. Serrano 8 junio, 2011 10:34

    Te deberías pensar poner la serie de posts sobre organización de un proyecto en R, guía de estilo y alguno más en esa línea juntos en una única guía que vendría muy bien a novatos y menos novatos. Buen trabajo.

  2. Manuel 8 junio, 2011 10:37

    Buen artículo! Mi forma de trabajar es muy similar, con alguna carpeta más (tengo una carpeta «test» para testear cosas, o una en la que guardo las publicaciones que genero a partir de mis datos). Quizás, como diferencia que yo dejo un script R en el directorio raiz que llama al resto de scripts de la carpeta src. De esa forma ejecuto todos los análisis de una sola orden. Otra cosa que acostumbro a hacer es marcar como «solo de lectura» los ficheros de datos originales, para evitar «accidentes».

  3. sergiojsj 8 junio, 2011 10:48

    Una buena costumbre también es crear informes con Sweave con el código explicito de tablas y gráficas. Es lo que se llama reproducible research. Pasados unos años siempre puedes ver de donde narices salen los datos de la gráfica del articulo o el informe en cuestión

  4. Juan José Gibaja Martíns 8 junio, 2011 11:17

    Mi forma de trabajar es muy parecida a la que propones. La tomé del siguiente manual: cran.r-project.org/doc/contrib/Robinson-icebreaker.pdf

  5. José Luis 9 junio, 2011 0:02

    Me ha gustado mucho este post. Buen trabajo, Carlos. Un saludo

  6. jaume 1 julio, 2011 15:19

    Vaya, vaya, que interesante.
    No se si lo que propones se adapta a mi forma de trabajar, pero seguro voy replantear mi forma de organizar el trabajo con R.

    Gracias.

Los comentarios están desabilitados.