Suppose I have an object x
in my current session:
x <- 1
How can I use this object in an Sweave or knitr document, without
I would take a slightly different approach to this, since using global variables reduces the reproducibility
of the analysis. I use brew
+ sweave/knitr
to achieve this. Here is a simple example.
# 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))
Both Sweave and knitr
makes use of the global environment (see globalenv()
) when evaluating R code chunks, so whatever in your global environment can be used for your document. (Strictly speaking, knitr
uses the parent frame parent.frame()
which is globalenv()
in most cases)
I think it just works. If your Sweave file is named "temp.Rnw", just run
> x <- 5
> Sweave("temp.Rnw")
You'll have to worry about naming the resulting output properly so each report doesn't get overwritten.
Another option I have used in the past is to have the Sweave code open a file,
in my R session
write.csv(x, "tabletoberead.csv")
in my sweave document
<<label=label, echo=FALSE>>=
datatobeused<-read.csv("tabletoberead.csv")
...more manipulations on data ....
@
Obviously you should include code to stop if the file can't be found.