Używam pliku Makefile, aby zautomatyzować działanie Sweave dla moich raportów analitycznych w R za pomocą podejścia nakreślonego przez Jeromy Anglim z wielkim sukcesem. Ostatnio usłyszałem o pakiecie cacheSweave i chciałbym włączyć tę funkcjonalność do mojego pliku Rnw. Korzystam z pakietu ProjectTemplate, aby załadować wszystkie niezbędne pliki podczas uruchamiania, a to zajmuje trochę czasu, ponieważ muszę wstępnie przetworzyć nieprzetworzone pliki danych. Przykłady w cacheSweave winiety pokazują jak uruchomić Sweave z kierowcą cacheSweave w sesji R:Jak korzystać z cacheSweave w połączeniu wsadowym typu "Sweave" przez make?
library(cacheSweave)
Sweave("foo.Rnw", driver = cacheSweaveDriver)
Jak używam cacheSweaveDriver w moim poleceniem uruchomienia Sweave w trybie wsadowym? W moim makefile ten sposób wzywam Sweave:
$(TEXFILE).tex: $(TEXFILE).Rnw
R CMD SWeave $(TEXFILE).Rnw
R CMD Stangle $(TEXFILE).Rnw
Używam Emacsa + ESB, aby utworzyć plik .Rnw i uruchomić make. Oto reszta mojego makefile dla odniesienia:
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