¿Cuáles son formas eficientes de organizar el código R y la salida? [cerrado]

23

Estoy buscando información sobre cómo otros organizan su código R y su salida.

Mi práctica actual es escribir código en bloques en un archivo de texto como tal:

#=================================================
# 19 May 2011
date()
# Correlation analysis of variables in sed summary
load("/media/working/working_files/R_working/sed_OM_survey.RData")
# correlation between estimated surface and mean perc.OM in epi samples
cor.test(survey$mean.perc.OM[survey$Depth == "epi"], 
    survey$est.surf.OM[survey$Depth   == "epi"]))
#==================================================

Luego pego el resultado en otro archivo de texto, generalmente con alguna anotación.

Los problemas con este método son:

  1. El código y la salida no están vinculados explícitamente excepto por fecha.
  2. El código y la salida están organizados cronológicamente y, por lo tanto, pueden ser difíciles de buscar.

He considerado hacer un documento de Sweave con todo, ya que podría hacer una tabla de contenido, pero parece que puede ser más complicado que los beneficios que proporcionaría.

Avíseme de cualquier rutina efectiva que tenga para organizar su código R y su salida que permita una búsqueda y edición eficientes del análisis.

DQdlM
fuente
2
Solo para evitar copiar / pegar, sink()o capture.output()podrían ser tus amigos. Vale la pena considerar las utilidades de informes, como Hmisc , Sweave o brew (su punto 1). Los sistemas de versiones ( rcs , svn o git ) podrían ayudar con el punto 2.
chl
@chl: gracias por las sugerencias. No estaba al tanto de sink()y capture.output(). Eso es genial.
DQdlM
1
hoy también hay knitr!
kjetil b halvorsen

Respuestas:

22

No eres la primera persona en hacer esta pregunta.

Bernd Weiss
fuente
+1 y el primer enlace que proporcionas hace referencia a un hilo :-)
chl
@chl ¡Gracias! Me preguntaba si esta pregunta es un duplicado y debería cerrarse ...
Bernd Weiss
Es, en mi opinión. Pero como no hay votos para cerrar, soy reacio a cerrarlo. Además, el más antiguo era más general, pero una pregunta muy similar se ha cerrado en el pasado. Esperemos y veamos cómo va.
chl
gracias por la lista! Esto es muy util. Pensé que no era el primero en tener esta pregunta, pero no parecía encontrar mucho con mi (obviamente inepta) búsqueda inicial.
DQdlM
6

Por mi parte, organizo todo en 4 archivos para cada proyecto o análisis. (1) 'código' Donde almaceno archivos de texto de funciones R. (2) 'sql' Donde guardo las consultas utilizadas para recopilar mis datos. (3) 'dat' Donde guardo copias (generalmente csv) de mis datos sin procesar y procesados. (4) 'rpt' Donde guardo los informes que he distribuido.

TODOS mis archivos se nombran usando nombres muy detallados como 'analysis_of_network_abc_for_research_on_modified_buffer_19May2011'

También escribo documentación detallada por adelantado donde organizo la hipótesis, cualquier suposición, criterios de inclusión y exclusión, y los pasos que tengo la intención de tomar para alcanzar mi entregable. Todo esto es invaluable para la investigación repetible y hace que mi proceso anual de establecimiento de objetivos sea más fácil.

Será
fuente
2

Ahora que hice el cambio a Sweave, nunca quiero volver. Especialmente si tiene gráficos como salida, es mucho más fácil hacer un seguimiento del código utilizado para crear cada gráfico. También hace que sea mucho más fácil corregir una cosa menor al principio y hacer que pase por la salida sin tener que volver a ejecutar nada manualmente.

Aaron - Restablece a Monica
fuente
1
Sweave es maravilloso. Lleva un tiempo acostumbrarse, pero si ya conoce TeX y R, es la opción obvia. También le permite no perder el tiempo alineando columnas de la tabla nunca más, lo cual es bueno.
richiemorrisroe
Gracias por el aporte. Mis 2 preocupaciones con Sweave son 1) terminaré con un bazillion de archivos en mi directorio, especialmente con muchas figuras, y 2) tendré que tener mucho cuidado con el código para evitar problemas cada vez que compile todo el documento (por ejemplo, creo que algo está cargado y no lo está). ¿Tienes estos problemas?
DQdlM
1) Puede elegir eliminar los archivos intermedios si lo desea; Yo uso el script Sweave.sh ( cran.r-project.org/contrib/extra/scripts/Sweave.sh ) que lo hace automáticamente; aunque se puede apagar fácilmente. Si lo hace, asegúrese de saber qué eliminará antes de usarlo para evitar posibles desastres. La versión corta es que si ningún archivo comparte el nombre base de su archivo Rnw, está bien.
Aaron - Restablece a Monica
2) En mi opinión, tener que tener cuidado de esa manera es algo bueno, y a veces compilará mi documento de Sweave con ese propósito exacto en mente, es decir, para asegurarme de haber realizado un seguimiento adecuado de todo lo necesario para recrear el análisis.
Aaron - Restablece a Monica
1
@ naught101: Para análisis largos, lo ejecuto por separado y guardo los resultados, generalmente en un .RDataarchivo, para ingresarlos en el documento de Sweave. Sin embargo, también hay varias opciones excelentes para "almacenar en caché" los resultados de un fragmento de código para que no se vuelva a ejecutar.
Aaron - Restablece a Mónica el
2

Para estructurar archivos de código .R únicos , también puede usar strcode , un complemento de RStudio que creé para insertar separadores de código (con títulos opcionales) y, en función de ellos, obtener resúmenes de archivos de código. Explico su uso con más detalle en esta publicación de blog .

Lorenz Walthert
fuente