【问题标题】:practically getting started with Sweave开始使用 Sweave
【发布时间】:2010-07-21 08:35:38
【问题描述】:

我的问题可能没有标题所暗示的那么笼统。我正在使用 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 代码?

感谢您提供任何建议、提示、链接和回溯到根源...

【问题讨论】:

  • 如果您承认您的问题可能没有标题所暗示的那么笼统,这表明您应该想出一个更好的标题,对吗?
  • 对标题的任何帮助表示赞赏:) 基本上我不想将帖子与两个密切相关的问题分开(w.r.t SO 通常甚至 R 标签)。另一方面:如何总结一个软件和一个工作流程的问题?
  • 我对 Sweave 或 R 的了解不够,无法建议一个更好的标题

标签: r latex sweave


【解决方案1】:

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

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)
@ 

【讨论】:

    【解决方案2】:

    你可能想看看theserelatedSOposts。我的帖子的其余部分与您的问题 2 有关。

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

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

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

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

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

    【讨论】:

    • +1 :) 。第一个建议对我来说听起来很合理,即使没有尝试。不要得到第二个,但希望当我尝试时我会。也许也是因为到目前为止我只是手动调用了 .tex 渲染(使用 texshop)。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 是的,这是一个长期的问题。我测试了 Komodo / sciviews-R、Eclipse / StatET 甚至 ESS。到目前为止,我没有求助于 ESS,因为我不想浪费时间在我的异国(瑞士)键盘上遇到了一些与 R 无关的问题。现在,我对 Komodo 很满意,但不确定备受赞誉的 Eclipse/StatET 组合是否有助于实现舒适的 sweave 工作流程......
    • 好的。好吧,不管你选择编辑器还是 IDE,我建议使用save.image()load(".Rdata"),副source()。我发现它在编辑阶段为我节省了很多时间。使用只需 10 秒即可运行的 R 文件尝试两种方式,您会很快看到优势。
    • 查看cacheSweave 包 - 它缓存运行计算的结果,如果其内容尚未更新,则跳过代码块。
    • cacheSweave 非常酷,并且提供了save.image() 的省时优势,但我很确定它需要将所有计算嵌入到 .Rnw 文件中。你能用一个只提供一个 R 文件的块来做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2016-10-20
    • 2012-04-30
    • 1970-01-01
    • 2020-03-18
    • 2016-09-04
    相关资源
    最近更新 更多