I am just discovering Sweave
and R
. I have seen some examples of Sweave
documents and have also started to write one or two on my own. I am impressed by the ability of doing computations in R
and outputting results directly in a LaTeX
document.
Now I am thinking of bigger documents (as we usually have with LaTeX
) that consist of several pages and several parts. With LaTeX
(I use WinEdt), I set a main document (e.g. main.tex
) and then have other subsidiary documents like introduction.tex
, discussion.tex
etc.
My question is: Can we do this with Sweave
as well? Now I am working with single Sweave
document (.Rnw) alone. Can we have multiple Sweave
documents (with one main and the secondary ones) like we normally do with LaTeX
?
A workaround would be to have separate Sweave
files and then sweave them to produce the R
LaTeX
chunks which can be copied to a LaTeX
document but then the whole idea seems quite inefficient and time consuming.
Please do let know what suggestions and solutions that you have.
Thanks a lot...
Sweave is a function in the statistical programming language R that enables integration of R code into LaTeX or LyX documents. The purpose is "to create dynamic reports, which can be updated automatically if data or analysis change".
The RStudio IDE is compatible with both the pdfLaTeX and XeLaTeX typesetting engines. You can also specify a custom LaTeX program by setting the RSTUDIO_PDFLATEX environment variable (see below for more details).
Here is what works very well for me:
I have one master file ("master.Rnw") that has no text but only serves to collect the files (chapters, sections) which form the document in the end.
Then I have one file with R code that is being reused in various other files ("func.Rnw"). Here, I have lot of named chunks
<<my_fun_1,eval=FALSE,echo=FALSE>>= # code: c <- a * b @
In master.Rnw, the first thing after \begin{document} I do is
\SweaveInput{func.Rnw}
and from there, I have my named chunks available. In a file "chap1.Rnw" I can now have
<<echo=FALSE>>= a <- 10 b <- 25 <<my_fun_1>> c @
Of course, I have to
\SweaveInput{chap1.Rnw})
into master.Rnw.
I only have to \Sweave{master.Rnw}
and then pdflatex the resulting master.tex file, no copying/ pasting or processing of multiple files.
I'm just writing a paper of 60+ pages with about 25 tables and figures and everything works perfectly well so far.
Hope this helps, Rainer
I'm using Sweave to write a book with about 16 chapters. I agree that using a makefile with multiple Rnw files is a good idea. One other nice thing abut this approach is that make can be run in parallel (-p I think), so depending on how the chapter's objects depend on each other, you can run a lot of code simultaneously.
The thing that has made a difference for me is caching. Several of my code chunks can run for days but have not changed over the course of writing the book. There are a few packages that allow you to save the results when it is run and only re-run the chunk if the objects that the chunk depends on have changed.
There are a few packages to do this. See:
http://cran.r-project.org/web/views/ReproducibleResearch.html
I use the weaver package form Bioconductor.
While I'm on a brain dump... if you have more than one author, I found that a shared Dropbox account is an excellent way of maintaining the project.
Max
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With