× ¿Necesitas ayuda para aprender R? Inscríbete en el Curso de introducción a R de Applied Epi, prueba nuestros Tutoriales gratuitos de R, escribe en nuestro Foro de preguntas y respuestas, o pregunta por nuestra Asistencia técnica para R.

41 Organización de informes rutinarios

Esta página cubre el paquete reportfactory, que es un complemento para el uso de R Markdown para los informes.

Este paquete facilita la ejecucion de reportes de rutina, especialmente la compilación de múltiples archivos R Markdown y la organización de sus resultados. En esencia, proporciona una “fábrica” desde la que se pueden ejecutar los informes R Markdown, obtener automáticamente carpetas con fecha y hora para guardar los archivos de salida, y generar un control de versiones “ligero”.

reportfactory es uno de los paquetes desarrollados por RECON (R Epidemics Consortium). Aquí está su sitio web y su Github.

41.1 Preparación

Cargar paquetes

En RStudio, instalá la última versión del paquete reportfactory desde Github.

Podés hacerlo a través del paquete pacman con p_load_current_gh() que forzará la instalación de la última versión desde Github. Proporcioná la cadena de caracteres “reconverse/reportfactory”, que especifica la organización de Github (reconverse) y el repositorio (reportfactory). También puede utilizar install_github() del paquete remotes, como alternativa.

# Instalá y cargá la última versión del paquete desde Github
pacman::p_load_current_gh("reconverse/reportfactory")
#remotes::install_github("reconverse/reportfactory") # alternativa

41.2 Nueva fábrica

Para crear una nueva fábrica, ejecutá la función new_factory(). Esto creará una nueva carpeta de proyecto R autocontenida con las siguientes características predeterminadas:

  • La fábrica se añadirá a tu directorio de trabajo
  • El nombre del proyecto R de la fábrica será “new_factory.Rproj”
  • Tu sesión de RStudio se “trasladará” a este proyecto R
# Este comando creará una fabrica en el directorio de trabajo
new_factory()

Mirando dentro de la fábrica, se puede ver que las subcarpetas y algunos archivos se han creado de manera automática.

  • La carpeta report_sources contendrá tus scripts R Markdown, que generan sus informes
  • La carpeta de outputs contendrá el informe de salida (por ejemplo, HTML, Word, PDF, etc.)
  • La carpeta de scripts puede utilizarse para guardar otros scripts de R (por ejemplo, los que se convican en tus scripts de Rmd)
  • La carpeta de data puede utilizarse para guardar tus datos (se incluyen las subcarpetas “raw” (datos brutos) y “clean” (datos limpios))
  • Un archivo .here, para que puedas utilizar el paquete here para convocar a los archivos de las subcarpetas gracias a su relación con esta carpeta raíz (véase la página de proyectos en R para más detalles)
  • Se ha creado un archivo gitignore en caso de que se vincule este proyecto R a un repositorio de Github (ver [Control de versiones y colaboración con Github])
  • Un archivo README vacío, en caso de que uses un repositorio de Github

PRECAUCIÓN:: dependiendo de la configuración de tu ordenador, los archivos como “.here” pueden existir pero estar ocultos.

A continuación mencionamos configuraciones predeterminadas que tal vez quieras ajustar con el comando new_factory():

  • factory = Proporciona un nombre para la carpeta de fábrica (por defecto es “new_factory”)
  • path = Designa una ruta de archivo para la nueva fábrica (por defecto es el directorio de trabajo)
  • report_sources = Proporciona un nombre alternativo para la subcarpeta que contiene los scripts R Markdown (por defecto es “report_sources”)
  • outputs = Proporciona un nombre alternativo para la carpeta que contiene los resultados del informe (por defecto es “outputs”)

Ver ?new_factory para ver una lista completa de los argumentos.

Cuando creás la nueva fábrica, tu sesión de R se transfiere al nuevo proyecto R, por lo que debés cargar de nuevo el paquete reportfactory.

pacman::p_load(reportfactory)

Ahora podés ejecutar el comando factory_overview() para ver la estructura interna (todas las carpetas y archivos) de la fábrica.

factory_overview()            # muestra la estructura de la fábrica en la consola

El siguiente “árbol” de las carpetas y archivos de la fábrica se imprime en la consola de R. Fijáte que en la carpeta “data” hay subcarpetas para los datos “raw” y “clean”, y datos CSV de ejemplo. También hay “example_report.Rmd” en la carpeta “report_sources”.

41.3 Crear un informe

Desde la fábrica del proyecto R, creá un informe R Markdown como lo harías normalmente, y guardálo en la carpeta “report_sources”. Consultá la página de R Markdown para obtener instrucciones. A modo de ejemplo, hemos añadido lo siguiente a la fábrica:

  • Un nuevo script de R markdown titulado “daily_sitrep.Rmd”, guardado dentro de la carpeta “report_sources”.
  • Datos para el informe (“linelist_cleaned.rds”) guardados en la subcarpeta “clean” dentro de la carpeta “data”

Ejecutando factory_overview() podemos ver el archivo R Markdown en la carpeta “report_sources” y el archivo de datos en la carpeta de datos “clean” (resaltado):

A continuación mostramos una captura de pantalla del comienzo del archivo de Markdown “daily_sitrep.Rmd”. Podés ver que el formato de salida está configurado para ser HTML, a través de la cabecera YAML output: html_document.

En este sencillo script, hay comandos para:

  • Cargar los paquetes necesarios
  • Importar los datos del listado de casos utilizando una ruta de archivo del paquete here (lea más en la página sobre Importación y exportación)
linelist <- import(here("data", "clean", "linelist_cleaned.rds"))
  • Imprimir una tabla de resumen de casos, y exportarla con export() como un archivo .csv
  • Imprimir una epicurva, y exportarla con ggsave() como un archivo .png

Podés revisar la lista de informes R Markdown en la carpeta “report_sources” con este comando:

list_reports()

41.4 Compilar

En una fábrica de informes, “compilar” un informe de R Markdown implica que se ejecutará el script .Rmd y se producirá la salida (como se especifica en el script YAML, por ejemplo, como HTML, Word, PDF, etc.).

La fábrica creará automáticamente una carpeta con fecha y hora para las salidas en la carpeta “outputs”.

El informe de salida y los archivos generados por el script (por ejemplo, csv, png, xlsx) se guardarán en esta carpeta. Además, el propio script Rmd se guardará en esta carpeta, así tendrás un registro de esa versión del script.

Esto contrasta con el comportamiento normal de un R Markdown “tejido”, que guarda las salidas en la ubicación del script Rmd. Este comportamiento por defecto puede resultar en carpetas abarrotadas y desordenadas. El objetivo de la fábrica es mejorar la organización de archivos cuando uno necesita ejecutar informes con frecuencia.

Compilar por nombre

Podés compilar un informe específico ejecutando compile_reports() y proporcionando el nombre del script Rmd (sin la extensión .Rmd) a reports =. Para simplificar, podés omitir reports = y simplemente escribir el nombre R Markdown entre comillas, como se indica a continuación.

Este comando compilaría sólo el informe “daily_sitrep.Rmd”, guardando el informe de HTML, y las exportaciones de la tabla de .csv y la epicurva de .png en una subcarpeta con fecha y hora específicas, dentro de la carpeta “outputs”.

Tené en cuenta que si proporcionás la extensión .Rmd, debés escribir la extensión tal como aparece en el nombre del archivo (.rmd vs. .Rmd).

También hay que tener en cuenta que, al compilar, es posible que aparezcan temporariamente varios archivos en la carpeta “report_sources”, pero pronto desaparecerán al ser transferidos a la carpeta “outputs”.

Compilación por número

También se puede especificar el script Rmd a compilar proporcionando un número o vector de números a reports =. Los números deben alinearse con el orden en que aparecen los informes cuando se ejecuta list_reports().

# Compilar el segundo y el cuarto Rmd en la carpeta "report_sources"
compile_reports(reports = c(2, 4))

Compilar todos

Puedes compilar todos los informes R Markdown en la carpeta “report_sources” usando el argumento reports = a TRUE.

Compilar desde la subcarpeta

Podés añadir subcarpetas a la carpeta “report_sources”. Para ejecutar un informe R Markdown desde una subcarpeta, simplemente proporcioná el nombre de la carpeta a subfolder =. A continuación se muestra un ejemplo de código para compilar un informe Rmd localizado en una subcarpeta de “report_sources”.

compile_reports(
     reports = "summary_for_partners.Rmd",
     subfolder = "for_partners")

Podés compilar todos los informes Rmd dentro de una subcarpeta proporcionando el nombre de la subcarpeta a reports =, con una barra al final, como se indica a continuación.

compile_reports(reports = "for_partners/")

Parametrización

Como indicamos en la página sobre Informes con R Markdown, podés ejecutar informes con parámetros especificados. Podés pasar estos parámetros como una lista a compile_reports() a través del argumento params =. Por ejemplo, en este informe ficticio hay tres parámetros proporcionados a los informes de R Markdown.

compile_reports(
  reports = "daily_sitrep.Rmd",
  params = list(most_recent_data = TRUE,
                region = "NORTHERN",
                rates_denominator = 10000),
  subfolder = "regional"
)

Utilizar un “run-file”

Si tenés que ejecutar varios informes, podés crear un script de R que contenga todos los comandos compile_reports(). Un usuario puede simplemente ejecutar todos los comandos en este script de R y todos los informes se compilarán. Puedes guardar este “archivo de ejecución” (run file) en la carpeta “scripts”.

41.5 Salidas

Después de haber compilado los informes unas cuantas veces, la carpeta “outputs” tendría este aspecto (los resaltados se han añadido para mayor claridad):

  • Dentro de “outputs”, se han creado subcarpetas para cada informe Rmd
  • Dentro de ellas, se han creado otras subcarpetas para cada compilación única
    • Están marcados con fecha y hora (“2021-04-23_T11-07-36” significa 23 de abril de 2021 a las 11:07:36)
    • Podés editar el formato de la fecha/hora. Ver ?compile_reports
  • Dentro de cada carpeta compilada de fecha/hora, se almacena el resultado del informe (por ejemplo, HTML, PDF, Word) junto con el script Rmd (¡control de versiones!) y cualquier otro archivo exportado (por ejemplo, table.csv, epidemic_curve.png)

Esta es una vista dentro de una de las carpetas con fecha/hora, para el informe “daily_sitrep”. La ruta del archivo está resaltada en amarillo para enfatizar.

Por último, a continuación mostramos una captura de pantalla del informe de salida de HTML .

Podés utilizar list_outputs() para ver una lista de las salidas.

41.6 Miscelánea

Knit

Si querés “procesar” uno de tus informes R Markdown cliqueando el botón “Knit” podés hacerlo. En este caso, por defecto, las salidas aparecerán en la carpeta donde se guarda el Rmd - la carpeta “report_sources”. En versiones anteriores de reportfactory, la presencia de cualquier archivo que no sea Rmd en la carpeta “report_sources” impediría la compilación, pero esto ya no es así. Es posible ejecutar compile_reports() y no se producirá ningún error.

Scripts

Te recomendamos utilizar la carpeta “scripts” para almacenar “archivos de ejecución” o scripts .R que se originan en tus scripts .Rmd. Consultá la página sobre R Markdown para obtener consejos sobre cómo estructurar tu código en varios archivos.

Extras

  • Con reportfactory, podés utilizar la función list_deps() para listar todos los paquetes requeridos en todos los informes de toda la fábrica.

  • Hay un paquete de acompañamiento en desarrollo llamado rfextras que ofrece más funciones de ayuda para asistirte en la construcción de informes, tales como:

    • load_scripts() - carga todos los scripts .R en una carpeta determinada (la carpeta “scripts” por defecto)
    • find_latest()- encuentra la última versión de un archivo (por ejemplo, el último conjunto de datos)