Ejecute Sweave o knitr con objetos de la sesión R existente

Supongamos que tengo un objeto x en mi sesión actual:

 x <- 1 

¿Cómo puedo usar este objeto en un documento Sweave o knitr, sin tener que asignarlo explícitamente?

 \documentclass{article} \begin{document} <>= print(x) @ \end{document} 

La razón por la que estoy preguntando es porque quiero escribir un guión R que importe datos y luego produzca un informe para cada sujeto usando una plantilla Sweave.

Creo que solo funciona. Si su archivo Sweave se llama “temp.Rnw”, simplemente ejecute

 > x <- 5 > Sweave("temp.Rnw") 

Tendrá que preocuparse por nombrar correctamente el resultado resultante para que no sobrescriba cada informe.

Tomaría un enfoque ligeramente diferente de esto, ya que el uso de variables globales reduce la reproducibility del análisis. Utilizo brew + sweave/knitr para lograr esto. Aquí hay un ejemplo simple.

 # brew template: "template.brew" \documentclass{article} \begin{document} <<>>= print(<%= x %>) @ \end{document} # function to write report write_report <- function(x){ rnw_file <- sprintf('file_%s.rnw', x) brew::brew('template.brew', rnw_file) Sweave(rnw_file) tex_file <- sprintf('file_%s.tex', x) tools::texi2pdf(tex_file, clean = TRUE, quiet = TRUE) } # produce reports dat <- 1:10 plyr::l_ply(dat, function(x) write_report(x)) 

Tanto Sweave como knitr hacen uso del entorno global (consulte globalenv() ) cuando evalúa fragmentos de código R, de modo que cualquier elemento de su entorno global puede utilizarse para su documento. (Estrictamente hablando, knitr usa el marco padre parent.frame() que es globalenv() en la mayoría de los casos)

Otra opción que he usado en el pasado es hacer que el código de Sweave abra un archivo,

en mi sesión R

 write.csv(x, "tabletoberead.csv") 

en mi documento sweave

 <>= datatobeused<-read.csv("tabletoberead.csv") ...more manipulations on data .... @ 

Obviamente, debe incluir código para detenerse si no se puede encontrar el archivo.