2011-02-03 10 views
7

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 

Odpowiedz

3

Gregor Gorjanc ma skrypt, aby umożliwić w ten sposób:

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

Jest bardziej elegancki niż mój domowy rozwiązanie: który jest, aby prosty plik o nazwie "runcachesweave.R" zawierający:

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

a następnie wywołanie R CMD SERII runcachesweave.R; latexmk -pdf foo.tex

Powiązane problemy