D.2 用odfWeave整合OpenOffice

用Sweave可以将R代码及其输出嵌入到LaTeX文档中,然后编译成PDF、PostScript或DVI文件。最终生成的文档很漂亮,但却无法编辑。此外,有不少客户要求报告为诸如Word一类的格式。

用odfWeave可以将R代码及其输出嵌入到OpenOffice文档中。不是将R代码块放入LaTeX文档,而是将R代码块放入OpenOffice ODT文件(见图D-3)。ODT文件的一个优势是可以用WYSIWYG(所见即所得)的编辑器创建,这种编辑器如OpenOffice Writer(www.OpenOffice.org);不需要学习标记语言。

以ODT文件创建noweb文档后,用odfWeave包中的odfWeave()函数对其进行处理。跟Sweave不一样,在第一次使用之前要先下载和安装odfWeave(install.packages("odfWeave")),每个要使用该函数的会话中都要加载这个包。例如:

  1. library(odfWeave)
  2. infile <- "example.odt"
  3. outfile <- "example-out.odt"
  4. odfWeave(infile, outfile)

这会以图D-4中的example.odt文件作为输入,生成如图D-5所示的example-out.odt文件。在odfWeave()语句前面加上options(SweaveSyntax="SweaveSyntaxNoweb")可以减少一些操作系统上的解析错误。

D.2 用odfWeave整合OpenOffice - 图1

图D-4 要通过odfWeave处理的初始noweb文件(example.odt)

D.2 用odfWeave整合OpenOffice - 图2

图D-5 ODF格式的最终报告(example-out.odt)。这个报告的第二页跟图D-2中Sweave输出的第二类似,为了节约篇幅就不展示了

SweaveodfWeave之间有如下一些区别。

  • odfWeave不能用xtable()函数。默认情况下,odfWeave会将数据框、矩阵和向量渲染成美观的格式。用户也可以用odfTable()函数更加细致的调节这些对象的格式。

  • ODF文档使用XML标记,而不是LaTeX。因此,绝不要使用result=tex选项。使用odfTable()的代码块应该使用result=xml

  • 输入文件和输出文件的文件名应该不一样。跟Sweave不一样,odfWeave("example.odt")会用最终的报告覆盖noweb文档。

看图D-4,你会注意到ANOVA表格的格式并不好看(跟Sweave中的效果相比)。这个表格是R生成的标准的等宽字体。这是因为odfWeave没有对应lm()glm()等函数返回对象的格式化函数。要正确格式化这些函数的结果,我们需要将对象中感兴趣的部分(在这个例子中就是fit)提取出来,然后将其放入矩阵或数据框中。

在有了ODF格式的报告后,可以继续编辑它,优化格式,转存为ODT、HTML、DOC或DOCX格式。更多信息请参阅odfWeave手册和简介。