用Sweave写大文件。可以像LaTeX一样吗?

时间:2011-12-03 07:04:11

标签: r latex sweave

我刚刚发现SweaveR。我已经看到了Sweave文档的一些示例,并且我自己也开始编写一两个文档。在R中进行计算并直接在LaTeX文档中输出结果的能力给我留下了深刻的印象。

现在我正在考虑更大的文档(我们通常使用LaTeX),它包含多个页面和几个部分。使用LaTeX(我使用WinEdt),我设置了一个主文档(例如main.tex),然后包含其他子文档,如introduction.texdiscussion.tex等。

我的问题是:我们也可以使用Sweave执行此操作吗?现在我单独使用单个Sweave文档(.Rnw)。我们可以拥有多个Sweave文档(包含一个主文档和次要文档),就像我们通常使用LaTeX一样?

一种解决方法是使用单独的Sweave文件,然后将它们编组以生成R LaTeX个块,这些块可以复制到LaTeX文档但是然后整个这个想法看起来非常低效和耗时。

请知道您有哪些建议和解决方案。

非常感谢...

3 个答案:

答案 0 :(得分:19)

这对我来说非常有用:

我有一个主文件(“master.Rnw”),它没有文本,但只用于收集最终形成文档的文件(章节,部分)。

然后我有一个带有R代码的文件,它正在各种其他文件中重用(“func.Rnw”)。在这里,我有很多命名的块

<<my_fun_1,eval=FALSE,echo=FALSE>>=
# code:
c <- a * b
@

在master.Rnw中,\ begin {document}之后的第一件事就是

\SweaveInput{func.Rnw}

从那里,我有我的命名块。在文件“chap1.Rnw”中,我现在可以拥有

<<echo=FALSE>>=
a <- 10
b <- 25
<<my_fun_1>>
c
@

当然,我必须

\SweaveInput{chap1.Rnw})

进入master.Rnw。

我只需要\Sweave{master.Rnw}然后pdflatex生成的master.tex文件,不复制/粘贴或处理多个文件。

我只是写了一篇60多页的论文,里面有大约25个表格和数字,到目前为止一切都很顺利。

希望这有帮助, 赖

答案 1 :(得分:4)

我正在使用Sweave写一本约16章的书。我同意使用带有多个Rnw文件的makefile是个好主意。这种方法的另一个好处是make可以并行运行(-p我认为),因此根据章节对象相互依赖的方式,您可以同时运行大量代码。

对我有所帮助的是缓存。我的几个代码块可以运行几天但在编写本书的过程中没有改变。有一些软件包允许您在运行时保存结果,并且只有在块所依赖的对象发生更改时才重新运行块。

有一些包可以做到这一点。参见:

http://cran.r-project.org/web/views/ReproducibleResearch.html

我使用Weaver包形式的Bioconductor。

当我正在进行大脑转储时...如果你有多个作者,我发现共享的Dropbox帐户是维护项目的绝佳方式。

最高

答案 2 :(得分:1)

我建议使用RStudio(http://www.rstudio.com/ide/)而不是WinEdt。 Sweave很好地集成到该IDE中,因为在WinEdt中,您可以将一个文件设置为主文件。从主文件中,您可以使用

包含子文件
\SweaveInput{Child.Rnw}

您可以通过包含指令

将子文件链接回主文件
% !Rnw root = Master.Rnw
子文件中的

。这样,当处理子文件并对其进行排版时,RStudio知道要排版主文件。

详细信息在http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

的RStudio文档中进行了解释

最好的功能是,即使使用多文件文档,Synctex和TeX错误日志导航仍然有效。