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")
),每个要使用该函数的会话中都要加载这个包。例如:
library(odfWeave)
infile <- "example.odt"
outfile <- "example-out.odt"
odfWeave(infile, outfile)
这会以图D-4中的example.odt文件作为输入,生成如图D-5所示的example-out.odt文件。在odfWeave()
语句前面加上options(SweaveSyntax="SweaveSyntaxNoweb")
可以减少一些操作系统上的解析错误。
图D-4 要通过odfWeave处理的初始noweb文件(example.odt)
图D-5 ODF格式的最终报告(example-out.odt)。这个报告的第二页跟图D-2中Sweave输出的第二页类似,为了节约篇幅就不展示了
Sweave
和odfWeave
之间有如下一些区别。
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
手册和简介。