我刚刚发现Sweave
和R
。我已经看到了Sweave
文档的一些示例,并且我自己也开始编写一两个文档。在R
中进行计算并直接在LaTeX
文档中输出结果的能力给我留下了深刻的印象。
现在我正在考虑更大的文档(我们通常使用LaTeX
),它包含多个页面和几个部分。使用LaTeX
(我使用WinEdt),我设置了一个主文档(例如main.tex
),然后包含其他子文档,如introduction.tex
,discussion.tex
等。
我的问题是:我们也可以使用Sweave
执行此操作吗?现在我单独使用单个Sweave
文档(.Rnw)。我们可以拥有多个Sweave
文档(包含一个主文档和次要文档),就像我们通常使用LaTeX
一样?
一种解决方法是使用单独的Sweave
文件,然后将它们编组以生成R
LaTeX
个块,这些块可以复制到LaTeX
文档但是然后整个这个想法看起来非常低效和耗时。
请知道您有哪些建议和解决方案。
非常感谢...
答案 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错误日志导航仍然有效。