3

我的问题可能没有标题所暗示的那么普遍。我正在使用 MySQL 数据库在 Mac OS X 上运行 R 来存储数据。我使用 Komodo / Sciviews-R 已经有一段时间了。最近我需要自动生成的报告并研究了 Sweave。我猜 StatET / Eclipse 似乎是 Sweavers 的“标准”解决方案。

1)从 Komodo 切换到 StatET Eclipse 是否合理?我之前尝试过 StatET,但选择 Komodo 而不是 StatET,因为我非常喜欢来自 Komodo 的 calltip / autosuggest 和更方便的配置。

2) 生成 Sweave 文件的合理工作流程是什么?通常我会先开发我的 R 代码,然后再关心报告。我今天刚刚了解到,Sweave 中有一个文件同时包含 R 代码和 Latex 代码,并且从该文件中创建了 .tex 文档。虽然示例文件看起来很方便,但无法真正想象如何将我的 250 多行 R 代码输入文件并将其与 Latex 混合。

是否可以只将 qplot() 和 ggplot() 语句输入到这样的文档中,并以某种方式获取数据库连接和中间结果等功能?

还是只是习惯了 Latex 和 R 代码的混合?

感谢您提供任何建议、提示、链接和回到根目录...</p>

4

3 回答 3

8

您已经问了几个问题,所以这里有几个答案;

StatEt/Eclipse 是做 Sweave 的正确方法吗?

不一定(注意:我是一个狂热的 StatEt/Eclipse 用户,并且将它用于纯 R 和 Sweave/R 并且喜欢它,我没有使用过 Komodo / sciviews-R)。您应该能够从任何将生成 .tex 文件的 R 命令行运行 sweave 命令。然后,您可以将 .tex 文件转换为任何 tex 环境中可读的文件(如 pdf)。

什么是好的 Sweave 工作流程?

当我想将一个 r 脚本变成一个 sweave 报告时,我通常从一个空的 sweave 模板开始,然后将整个 R 脚本复制/粘贴到标题后面的一个 sweave R 块中,即;

<<label=myEntireRScript, echo=false, include=false>> 
#Insert code here
myTable<-dataframe(...)
myPlot<-qplot(....)
@ 

然后我浏览并找到我想要报告的部分。例如,如果我想在报告中放入一个表格,我将剪切 R 块并放入一个 xtable 块,变量和绘图也是如此。

<<label=myEntireRScript, echo=false, include=false>>=  
#Insert code here
@ 
Put any text I want before my table here, maybe with a \Sexpr{print(variable)} named variable

<<label=myTable, result=Tex>>= 
myTable<-dataframe(...)
print(xtable(mytable,...),...)
@ 
Any text I want before my figure
<label=myplot, result=figure>>= 
myPlot<-qplot(....)
print(qplot)
@ 
于 2010-07-21T19:59:39.167 回答
7

您可能想查看这些 相关的 SO 帖子。我的帖子的其余部分与您的问题 2 相关。

使用 Sweave 创建报告时,我通常将大部分 R 代码和报告文本分开。如果 R 代码运行速度很快,那么我更喜欢在 .Rnw 文件的开头包含以下内容:

<<>>
source('/path/to/script.r')
@

另一方面,如果 R 代码需要很长时间,我通常会在 R 脚本的末尾包含以下内容:

Sweave('/path/to/report.Rnw'); system('pdflatex report.tex')

这样,我可以快速重新生成报告,而无需再次运行所有 R 代码。然后,R 在 Sweave 文件中唯一要做的工作就是打印表格、制作图表并可能提取一些图形。

于 2010-07-21T11:14:47.760 回答
6

与 nullglob 一样,我更喜欢将 R 和 Sweave 文件分开,但我更喜欢将工作区保存在文件中save.image()而不是source()文件中。这避免了在每个 .Rnw 文件编译时运行 R 计算(而且我最终总是比我想要的更多地修改排版)。

我的一般工作流程是使用自己的 R 文件在自己的文件夹中完成每篇论文/项目。当计算端“完成”时,我save.image()按原样存储所有工作区变量。

然后,在同一目录中的 .Rnw 文件中,我使用 .Rnw 设置工作目录setwd()并使用 .Rnw 加载所有变量load(".Rdata")。当然,您可以更改用于工作区的名称,但我为每个文件夹创建一个工作区并保留默认名称。哦,如果您修改 R 文件,请务必保存工作区图像并注意在工作区和 .Rnw 文件中徘徊但不再是 R 文件的一部分的变量......这就是save.image()方法可以的地方引起一些头痛。

我在 Mac 上,如果你有点极客,我建议 TextMate,如果你真的很极客,我建议使用 emacs/ess。我使用 vim 和命令行 R,但 emacs/ess 最适合大多数人。如果您长期从事这项工作,我怀疑您会后悔为 R、Sweave 和 LaTeX 学习 emacs/ess。

于 2010-07-21T15:23:00.830 回答