org-babel联合R语言用于数据报告的生成

org-babel联合R语言用于数据报告的生成

近日帮助太太分析一组试验数据, 借机仔细研究了一下“文学化编程”理念, 发现 org-babel联合R语言 真的是生成数据报告的“神器”。

1 系统准备

首先当然是要安装EMACS、org-mode、org-babel、R、ESS这些必备的软件包。


2 使用


先建立一个org文档, 再在文档中按照org格式输入章节、文字, 说明这篇报告的用途。 在需要输入数据分析代码的部位输入“<s”,再按TAB键, 就会自动扩展成为“#+BEGIN_SRC …… #+END_SRC"的代码块。

在“#+BEGIN_SRC"语句末尾可加入如下参数, "R :session :results output :exports both"。 各个参数意义如下:

  • R 表示这部分代码是R语言,可以用 “ C-c ' " 进入和退出R语言编辑模式。
  • :session 表示这部分代码在同一个R语言会话中实现,包括这份报告中所有的代码块都可以在一个会话中实现。
  • :results 表示代码的结果用什么格式输出,如果是直接返回运算结果,用output; 如果是返回图形,则用graphics; 如果不想返回结果,则用silent。
  • :exports 表示代码在最终生成的报告中导出成什么格式,both表示结果和图形都导出。

例如,下面的代码块

#+BEGIN_SRC  R :session :results silent    

library(dplyr)    
df_IL <- read.csv("IL.csv")   
df_TNF <- read.csv("TNF.csv")   
df_DPPC <- read.csv("DPPC.csv")  

#+END_SRC  


表示代码在R语言中生成,不返回结果, 因为这是一组调用R包,生成数据框的语句。
而下面的代码块

#+BEGIN_SRC  R  :session :results output :exports both  

t.test(df_IL$a, df_IL$b)  

#+END_SRC  


表示代码返回的结果为直接返回的结果, 会导出至最终报告中。
而下面的代码块

#+BEGIN_SRC R :session :file img1.png :results graphics :exports both   
 
boxplot(df_IL$a, df_IL$b, df_IL$c)  

#+END_SRC  


则表示返回的结果为图形,储存在img1.png这个文件中。 也会导出至最终报告中。

3 运算


运算整个缓冲区的代码 “ C-c C-v b "
运算当前的代码 “ C-c C-v e "

4 输出


输出为html文件 “C-c C-e h h "。
输出为odt文件 “C-c C-e o o"。
在输出时,所有代码块会重新运算、输出结果,并最终导出至文件中。
最终文件看起来像这样:

编辑于 2019-04-21

文章被以下专栏收录