the - knitr: ejecuta todos los trozos en un documento Rmarkdown
r markdown tutorial pdf (3)
Tengo un documento .Rmd cuyo proceso de Knitr está bien.
Me gustaría ejecutar todos los fragmentos del documento para poder explorar los resultados en mi shell R
En Rstudio hay una opción para ejecutar todos los fragmentos en el documento, pero no puedo encontrar la manera de lograr el mismo efecto en una sesión R simple (abierta en mi terminal).
¿Hay alguna forma de hacer esto?
Ni siquiera tiene que usar purl()
: si knit
el documento en la consola R, el código se evalúa en el entorno global (de manera predeterminada, vea la opción envir=
para knit()
).
Entonces, si su archivo es my.Rmd
, simplemente ejecute
library(knitr)
knit(''my.Rmd'')
Un truco útil: si solo desea ejecutar un determinado punto del documento, inserte un error como:
stop(''here'')
en el punto de un fragmento de código que desea que se detenga, y configure la siguiente opción knitr
:
opts_chunk $ set (error = FALSE)
en la consola antes de ejecutar knit()
.
cargar los archivos en variable de texto en bruto
file_name="your_file_name.Rmd"
txt <- readLines(file_name)
identificar el inicio y el final del fragmento (la primera columna será la línea en la que comienzan los fragmentos para cada fragmento y la segunda columna será donde termina el fragmento)
chunks <- matrix(grep("```",txt),ncol = 2,byrow = T)
seleccione todas las líneas entre el inicio y el final, que son el código real como cadena
temp <- apply(chunks,1,function(x) txt[(x[1]+1):(x[2]-1)])
ejecuta el código (esta línea ejecuta todo el código codificado en una variable de cadena)
eval(parse(text = temp))
Usar Run all chunks
es equivalente a:
- Crear un archivo R temporal
- Use
knitr::purl
para extraer todos los trozos R en el archivo temporal - Usa
source()
para ejecutar el archivo - Eliminar el archivo temporal
Me gusta esto:
tempR <- tempfile(fileext = ".R")
library(knitr)
purl("SO-tag-package-dependencies.Rmd", output=tempR)
source(tempR)
unlink(tempR)
Pero querrás convertir esto en una función. Esto es bastante sencillo, excepto que tiene que usar sys.source
para ejecutar el script R en el entorno global:
runAllChunks <- function(rmd, envir=globalenv()){
tempR <- tempfile(tmpdir = ".", fileext = ".R")
on.exit(unlink(tempR))
knitr::purl(rmd, output=tempR)
sys.source(tempR, envir=envir)
}
runAllChunks("SO-tag-package-dependencies.Rmd")