R Markdown学习

第一次听说R markdown的时候,简单以为Rmarkdown只是一个markdown拓展的一个小工具而已,最近才发现Rmarkdown是一个展示报告的利器!如果你不想用word等老套的报告模式,那么Rmarkdown绝对能满足你的需求,并且其还有其他优势所在(自行搜下就明白了)

下面总结下Rmarkdown的简单使用方法

首先得安装knitr包(R语言大神谢益辉写的)和rmarkdown包

knitr包将RStudio的Rmd格式文件编译为markdown格式,然后再将markdown文件直接渲染成HTML(这步knitr包和markdown包均可完成,最后会提到)

然后RStudio中点击File -> New_File -> R Markdown,先按照默认的设定来(Document,HTML),最后生成一个最简单的默认rmarkdown的模板,如下所示:

rmarkdown_demo


代码开头则是YAML header

---
title: "report"
output: html_document
---

title表示这个文档的主标题

  • 常见表示方法:title: "This is my first report"这种字符串形式,双引号可加可不加
  • 为了将主标题居中可以用html标签,如:title: <center>This is my first report</center>(但是输出时会有warning)

output则表示输出格式,格式有N种,常见的比如:

  • html_document 输出html格式
  • pdf_document 输出PDF格式
  • word_document 输出word格式

每个格式下面有N个参数可供选择,可用?html_document查看,比如随便挑几种看看:

output: 
  html_document:
    toc: TRUE                   #目录
    toc_float: TRUE             #目录的形式
    number_sections: TRUE       #各个标题的数字标记
    theme: readable             #文档主题
    # css: css/styles.css       #加入额外的CSS
    # df_print: paged           #表格的形式
    # fig_caption: TRUE         #图片设置

除了上述的参数外,其实还有一个蛮有用的includes参数可添加在html_document下面,主要用于在输出文档中添加额外的内容(有时还可以包括一些LaTeX语法哦)

includes:
  in_header: header.html
  before_body: before.html

如果你想将文档既输出html又想输出pdf,那么在output下继续写入pdf_document参数

output: 
  pdf_document:
    toc: TRUE
  html_document:
    toc: TRUE

接下来是R markdown的正文部分,这里是语法主要是markdown,按照作者谢益辉的说法,准确说是Pandoc’s Markdown。如果粗略的简单使用的话,主要去网上搜下markdown语法即可,半小时即可掌握,是一个轻便的标签语法;如果想深入了解Pandoc’s Markdown的话,可以看看https://pandoc.org/MANUAL.html

对我来说,也只会简单的用法,但是暂时是够用了,比如有一下几种:

  1. 标题:在文字前面几个数1-6个#号即可,分别代表1-6级标题

    # 这是 H1
    ## 这是 H2
    ###### 这是 H6
    
  2. 引用:即引言,引用别人的话等,在文字前加入>

    > This is a blockquote.
    
  3. 列表:可以分别有序列表和无序列表,前者用1.等数字表示,后者用*等符号表示

    #有序列表
    1. ONE
    2. TWO
    3. THREE
    #无序列表
    * Red
    * Blue
    * Green
    
  4. 代码块:用于输出一个整块代码,我一般用缩进4个空格,或者前后3个反引号表示

    ```
    This is plain code blocks
    ```
    
  5. 图片和超链接:用于链接图片和网页

    [myblog](http://www.bioinfo-scrounger.com)      #超链接
    ![image](path/to/image)                         #链接图片
    
  6. 编写数学公式:主要用LaTeX语言,如二项式分布概率计算公式(在Rmarkdown里显示的是公式,但这里是无效的)

    $$f(k) = C^k_n p^{k} (1-p)^{n-k}$$
    

还有其他用法可自行搜索,另外如果对html语言熟悉的话,在rmarkdown也中能用哦,代替一些markdown语法(这点在对报告进行一些细节上美化时非常实用)


除了上述的部分外,code chunks则是rmarkdown中核心部分,比如我们在示例中看的到:

```{r echo=FALSE}
summary(cars)
```

我们一些统计分析以及数据处理过程会用到一些R的函数,那么为了使报告有很好的重复性,我们就需要将分析过程写入报告中,并可重复展示结果,这就是rmarkdown的作用所在

{r echo=FALSE}是设置参数的地方,举一个例子,如:

  • eval判断是否执行这个代码
  • echo选择是否让代码在结果中显示
  • results是否输出结果(无论TRUE/FALSE,代码均执行,但结果不一定显示)
  • fig.width/fig.height用于设定展示图片的长宽

我们还可以在文档开头对全局代码做个全局设定

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

对于输出图片而言,我们选择用R代码产生的图片:

```{r}
plot(cars, pch = 18)
```

也可以从外界导入图片,则可以这样(knitr作者认为这种方式要比markdown链接图片的方式要更加可控):

```{r, out.width='25%', fig.align='center', fig.cap='...'}
knitr::include_graphics('images/hex-rmarkdown.png')
```

我们可以看到这里的code chunks中的r表示是用R来处理的,其实knitr还支持其他N种语言,如:Python,Shell,JS/CSS等

> names(knitr::knit_engines$get())
 [1] "awk"       "bash"      "coffee"    "gawk"      "groovy"    "haskell"  
 [7] "lein"      "mysql"     "node"      "octave"    "perl"      "psql"     
[13] "Rscript"   "ruby"      "sas"       "scala"     "sed"       "sh"       
[19] "stata"     "zsh"       "highlight" "Rcpp"      "tikz"      "dot"      
[25] "c"         "fortran"   "fortran95" "asy"       "cat"       "asis"     
[31] "stan"      "block"     "block2"    "js"        "css"       "sql"      
[37] "go"        "python"    "julia"

以上支持的语言详细说明可看knitr Language Engines

除了文字部分,对一个文档或者报告来说,表格也是非常重要的需求,表格一般可以有代码处理数据后生成的,也可以是读入外部数据所产生的,不管来源哪种,都可以用表格生成器(table generators):knitr包的kable()函数,使用方式非常简单

```{r echo=FALSE}
knitr::kable(iris[1:5, ], caption = 'A caption')
```

除了用kable()函数外,有个kableExtra包(也是中国人写的哦)的kable_styling()函数,配合kable()从而让表格排版更加美观点,附上中文版使用说明:用kableExtra做牛*的表格,功能只能说非常强大,让我们不在为表格排版美化再设置其他额外参数,用这个函数即可搞定,比如:

library(kableExtra)
kable(mtcars[1:5, 1:6], "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover"))

最后我们需要将报告输出,如果是RStudio上书写的话,点击界面上方的Knit按钮,然后选择输出格式就行,或者用rmarkdown的render函数输出

rmarkdown::render('report.Rmd', 'html_document')

以上是对knitr和rmarkdown的一个简单的介绍,如果需要更加进一步的了解以及掌握深层的技巧,可以查看以下资料(我也还没完全看完。。。)

https://rmarkdown.rstudio.com/lesson-13.html
R Markdown: The Definitive Guide

本文出自于http://www.bioinfo-scrounger.com转载请注明出处