Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing big documents with Sweave. Is it possible to do as with LaTeX?

Tags:

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...

like image 844
yCalleecharan Avatar asked Dec 03 '11 07:12

yCalleecharan


People also ask

What is a Sweave file?

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".

Can I use LaTeX in RStudio?

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).


2 Answers

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

like image 59
vaettchen Avatar answered Jan 19 '23 03:01

vaettchen


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

like image 23
topepo Avatar answered Jan 19 '23 03:01

topepo