21 用R制作研究报告

一个统计或数据分析的科研项目, 都会产生一个或多个研究报告。 因为使用统计与数据分析不可避免地有很多计算涉及在内, 这里假设使用RApp做了计算。 科研是一个不断改进的过程, 所以每一次重新做了计算, 研究报告中的汇总表格、图形都要更新。 这样的任务比较繁琐, 也容易出错。

“文学式编程”(literate programming, (Knuth 1984))是这样一种思想, 把撰写报告与计算程序有机地结合在一起, 用一个源文件文件既包含报告内容, 又包含计算程序。 每次产生研究报告时, 先运行源文件中的计算程序得到计算结果, 这些结果包括文字性内容与图形, 然后利用适当App自动地把这些原始文字、计算结果组合成最终的报告。 利用这样的思想, 可以自动生成重复的例行报告, 还可以作为“可重复科学研究”的载体。

上述的源文件一般是文本文件, 格式可以是Markdown格式, 也可以是LaTeX格式等许多格式。 R的knitrApp包就是用来支撑这样的编程思想的一个扩展包。

Markdown是一种很简单的文本文件格式, 通常保存为.md扩展名, 利用R程序进行扩展的版本保存为.Rmd扩展名。 Markdown文件里面有一些简单的格式标注方法, 比如两个星号之间的文字会转化为斜体, 缩进四个空格或一个制表符的内容会看成代码。 Markdown仅适用于比较简单的文章、源程序说明等, 不太适用于复杂的含有大量数学公式、图表的文章, 从markdown格式比较适合转换为html(网页)格式, 也可以转换为MS Word的docx格式, 通过LaTeX编译器可以转换为PDF格式, 也可以将docx转存为PDF格式, 或者用输出到PDF文件的打印机将网页格式转换为PDF格式。

LaTeX是一个文档排版系统, 功能强大,结果美观, 设计合理。 缺点是需要学习类似于HTML的另一种语言。 LaTeX源文件主要是编译为PDF。

R扩展包knitr包支撑在Markdown格式、LaTeX格式等类型的文件中插入R代码, 经过转换, 文中的R代码可以变成代码的结果文字、表格、图形, 与原有报告文字有机地结合在一起。

插入了R代码的markdowng格式的文件一般以.Rmd为扩展名, R的rmarkdown扩展包和knitr包一起为Rmd格式提供了支撑。

R的bookdown包进一步增强了R Markdown格式的功能, 支撑生成PDF、多文件互相链接的HTML、Word等输出, 其中的表格、图形可以变成浮动表, 公式、定理可以自动编号并支撑文献、公式、定理、图表、章节的引用和链接, 所以比较适用于编写一本书或论文、研究报告。

knitr包也支撑在LaTeX源文件中插入R代码, 通过编译使得R代码运行结果、图形自动插入生成的研究报告中。 原来有一个Sweave扩展包是支撑在LaTeX中插入R代码的, 现在knitr的功能已经涵盖并增强了此包功能。

下面几章分别先容markdown格式、R markdown格式、bookdown扩展包、简易网站制作和幻灯片制作。 参考:

  • (Xie, Allaire, and Grolemund 2019)
  • (Xie 2017)

利用R Markdown格式可以实行如下的任务:

  • 将单一的R Markdown文件编译为不同的格式,如:
    • HTML;
    • PDF;
    • MS Word。
  • 在RStudioApp内制作笔记本文档,可以在其中包含说明文字与R代码, 可以在笔记本文档内交互地运行R代码并能将结果交互地显示在笔记本内。
  • 生成演示幻灯片,可以是基于HTML5的,也可以是基于LaTeX beamer扩展包的, 或者MS Powerpoint。
  • 编写多章节组成的书籍。
  • 编写期刊论文。
  • 制作网站或者博客。
  • 制作商业智能仪表盘(dashboards),即数据可视化展示。

References

Knuth, Donald E. 1984. “Literate Programming.” The Computer Journal 27 (2): 97–111.

Xie, Yihui. 2017. Bookdown: Authoring Books and Technical Documents with R Markdown.

Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2019. R Markdown: The Definitive Guide. CRC Press. https://bookdown.org/yihui/rmarkdown/.