我一直在使用makefile自动运行Sweave,用于我在R中的分析报告,使用Jeromy Anglim概述的方法取得了巨大的成功。我最近听说过cacheSweave包,我想将该功能合并到我的Rnw文件中。我使用ProjectTemplate包在启动时加载所有必需的文件,这需要一些时间,因为我必须预处理原始数据文件。 cacheSweave插图中的示例显示如何在R会话中使用cacheSweave驱动程序运行Sweave:
library(cacheSweave)
Sweave("foo.Rnw", driver = cacheSweaveDriver)
如何在命令中使用cacheSweaveDriver以批处理模式运行Sweave?在我的makefile中,这是我调用Sweave的方式:
$(TEXFILE).tex: $(TEXFILE).Rnw
R CMD SWeave $(TEXFILE).Rnw
R CMD Stangle $(TEXFILE).Rnw
我正在使用Emacs + ESS创建.Rnw文件并运行make。这是我的makefile的其余部分供参考:
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
答案 0 :(得分:3)
Gregor Gorjanc有一个shell脚本允许这样做:
http://ggorjan.blogspot.com/2008/11/sweavesh-plays-with-cachesweave.html
它比我自制的解决方案更优雅:这是一个名为“runcachesweave.R”的简单文件,包含:
library(cacheSweave)
Sweave("foo.Rnw", driver = cacheSweaveDriver)
然后调用R CMD BATCH runcachesweave.R; latexmk -pdf foo.tex