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).
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)
}
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 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)
Crear_Rmd("script_para_rmd.R")