Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use cacheSweave in a batch Sweave call via make?

Tags:

r

sweave

I've been using a makefile to automate the running of Sweave for my analysis reports in R using the approach outlined by Jeromy Anglim with great success. I recently heard about the cacheSweave package and I would like to incorporate that functionality into my Rnw file. I use the ProjectTemplate package to load all of the necessary files at startup, and that takes some time because I have to preprocess the raw data files. The examples in the cacheSweave vignette show how to run Sweave with the cacheSweave driver within an R session:

library(cacheSweave)
Sweave("foo.Rnw", driver = cacheSweaveDriver)

How would I use the cacheSweaveDriver in my command to run Sweave in batch mode? In my makefile this is how I invoke Sweave:

$(TEXFILE).tex: $(TEXFILE).Rnw
        R CMD SWeave $(TEXFILE).Rnw
        R CMD Stangle $(TEXFILE).Rnw

I am using Emacs+ESS to create the .Rnw file and run make. Here is the rest of my makefile for reference:

TEXFILE=report_presentation
PLOTDIR= ../graphs
PLOTS=
FIGURES= $(PLOTDIR)/$(PLOTS)
INPUTS=

all: $(TEXFILE).pdf; make clean

.PHONY: all clean

 $(TEXFILE).pdf: $(TEXFILE).tex $(FIGURES) $(INPUTS)
# Initial run
pdflatex $(TEXFILE)

# Run bibtex if missing citations
@if(grep "Citation" $(TEXFILE).log > /dev/null);\
then \
    bibtex $(TEXFILE);\
    pdflatex $(TEXFILE); \
fi

# Recompile if instructed
@if(grep "Rerun" $(TEXFILE).log > /dev/null);\
then \
    pdflatex $(TEXFILE); \
fi

    $(TEXFILE).tex: $(TEXFILE).Rnw
        R CMD Sweave $(TEXFILE).Rnw
        R CMD Stangle $(TEXFILE).Rnw

    ## Remove unnecessary files
    clean:
       -rm -f $(TEXFILE).log $(TEXFILE).aux $(TEXFILE).out $(TEXFILE).blg $(TEXFILE).bbl $(TEXFILE).nav $(TEXFILE).snm $(TEXFILE).toc Rplots.pdf
like image 478
sheed03 Avatar asked Feb 03 '11 03:02

sheed03


1 Answers

Gregor Gorjanc has a shell script to allow this:

http://ggorjan.blogspot.com/2008/11/sweavesh-plays-with-cachesweave.html

It is more elegant than my homemade solution: which is to make a simple file called "runcachesweave.R" containing:

library(cacheSweave)
Sweave("foo.Rnw", driver = cacheSweaveDriver)

And then calling R CMD BATCH runcachesweave.R;latexmk -pdf foo.tex

like image 82
Jake Avatar answered Oct 16 '22 05:10

Jake