Objetivo

Generar un buen R-Script que contenga los comentarios necesarios para que otro usuario entienda los comandos que ejecuta ees una tarea relativamente sencilla. Colocar un buen titulo generado por comentarios sobre cada bloque de codigo suele ser suficiente.

Por cuestiones de trabajo a veces es necesario formalizar el script como un documento de trabajo (Aca es donde usualmente generamos un Rmd).

Generar un Rmd a partir de un script puede ser tedioso si este ultimo es muy extenso. (Lo digo por experiencia propria).

Por este motivo, desarrolle una pequeña funcion que convierte rapidamente nuestro R-Script en un Rmd (Para luego agregarle los detalles que hagan falta).

Función

Crear_Rmd<-function(Rscript,NombreRmd="NuevoDocumento.Rmd") {
  
  require(data.table)
  require(stringr)
  require(dplyr)
  
  codigo<-fread(Rscript,sep="\n",header = FALSE)$V1
  
  str_detect(codigo,"#")->titulos
  codigo==""->espacios_vacios
  cumsum(titulos)->bloque
  
  todo<-data.frame(codigo,titulos,espacios_vacios,bloque)
  todo$codigo<-as.character(todo$codigo)
  
  lista_bloques<-list()
  for (i in min(bloque):max(bloque)) {
    todo %>% filter(bloque==i)->segmento
    if (sum(segmento$titulo | segmento$espacios_vacios)==nrow(segmento)) {
      lista_bloques[[i]]<-c(segmento$codigo)
    } else {
      lista_bloques[[i]]<-c(segmento$codigo[1],
                            "```{r message=FALSE,warning=FALSE}",
                            segmento$codigo[-1],"```")
    }
  }
  
  cabecera<-c(
    "---",
    'title: "NUEVO DOCUMENTO"',
    'author: "Desconocido"',
    "output: ",
    "  html_document:",
    "    toc: TRUE",
    "    toc_float: TRUE",
    "    theme: cerulean",
    "---",
    "" ,
    "```{r setup, include=FALSE}",
    "knitr::opts_chunk$set(echo = TRUE)",
    "```",
    ""
  )
  
  data.frame(bloques=c(cabecera,unlist(lista_bloques)))->codigo_corregido
  names(codigo_corregido)<-"# SCRIPT"
  
  nombre_archivo<-NombreRmd
  
  write.table(codigo_corregido,nombre_archivo,sep="\n",
              quote = FALSE,row.names = FALSE,col.names = FALSE)
  
  file.edit(nombre_archivo)
}

Ejemplo de Uso

ADVERTENCIA: todos los bloques de codigo deben tener algun “titulo” sobre ellos. Los comentarios generados por “#” son los que luego se veran reflejados en el Rmd.

Script a Documentar

Script guardado como: script_para_rmd.R.

El codigo que contiene es el siguiente:

## Librerias
library(data.table)
library(dplyr)

## Levanto los datos

### Defino funcion
Leer_Drive<-function(link_drive,sep=",",dec=".") {
  require(data.table)
  id<-strsplit(link_drive,"id=")[[1]][2]
  return(fread(sprintf("https://docs.google.com/uc?id=%s&export=download", id),
               sep=sep,dec=dec,integer64 = "character"))
}

### Leo archivo
datos<-Leer_Drive("https://drive.google.com/open?id=1mhj0hSUuMefcB612NjtT75SWs71P7QBa",sep=";")
head(datos)

## Preparo los datos

### Hago un conteo de los planes
table(iris$Species)

Ejecutar funcion

Crear_Rmd("script_para_rmd.R")

Resultado

Archivo .Rmd:

Archivo HTML generado posteriormente: