生物信息学习的正确姿势

NGS系列文章包括NGS基础在线绘图、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 (ChIP-seq基本分析流程)、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程)、DNA甲基化分析、重测序分析、GEO数据挖掘(典型医学设计实验GEO数据分析 (step-by-step))、批次效应处理等内容。

1、rmarkdown简介

markdown是一种轻量级标记语言,它允许使用者可以通过简单的文本格式 编写文档,并且转换成html文档。markdown因为语法简单、上手容易,现在也越来越多的被文档编辑人员使用。有很多可以支持markdown编辑的应用软件,例如Mou、MarkdownEditor、Haroopad、Typora等,通过这些工具可以便捷的完成markdown文字录入,并且支持导出PDF、HTML等格式。

rmarkdown是R语言环境中提供的markdown编辑工具,运用rmarkdown撰写文章,既可以像一般的markdown编辑器一样编辑文本,也可以在rmarkdown中插入代码块,并将代码运行结果输出在markdown里。对于专注于用R语言写报告的数据分析师来说,rmarkdown既提高了数据分析工作的便捷性,也提高了数据分析报告的复用性。

2、rmarkdown的输出展示

2.1新建一个markdown项目

点击Rstudio左上角的新建项目,选择Rmarkdown文件格式,即可建立一个rmarkdown编辑文件 。在弹出的选项框里,可以申明rmarkdown的Title、Author以及默认的输出文件格式,一般可以选择HTML、PDF、Word格式,具体见下图。

markdown的结构

在新建的markdown文件里,主要包含三块内容:1.YAML、2.markdown文本、3.代码块。

1)YAML

YAML是Rmarkdown的头部文件(上图1位置),YAML定义了rmarkdwon的性质,比如title、author、date、指定output文件类型等。

2)markdown文本

markdown文本是rmarkdown里的主要内容(上图3位置),由编辑人员按照markdown语法自行编写文本内容,

3)代码块

rmarkdown的一个主要功能是可以执行文件内的代码块(上图2位置),并将代码执行结果展示在markdown里。这对撰写数据分析报告带来了极大的便利。

R代码块一般通过{R}来插入,另外{}内还可以定义参数来控制代码块运行结果的输出格式。一般包括代码及运行结果的输出、图片表格格式定义等。代码块参数主要包括如下几类:

eval
eval控制了代码块是否执行。若设定为eval=TRUE,则markdown会执行代码块里的代码;若eval=FALSE,则markdown不会执行代码。

echo
echo参数控制了markdown是否显示代码块。若echo=TRUE,则表示代码块显示在markdown文档显示代码块;反之,代码块不出现在输出结果中。

collapse
collapse设置为TRUE或者FALSE.用来控制文本输出结果是否和代码块混在一起。

fig.show :设置了图片输出方式

fig.show=‘asis’:表示plot在产生他们的代码后面

fig.show=‘hold’:所有代码产生的图片都放在一个完整的代码块之后

fig.show=‘animate’:表示将所有生成的图片合成一个动画图片

fig.show=‘hide’:表示产生所有图片,但是并不展示

fig.width:设置图片输出的宽度

fig.height:设置图片输出的高度

fig.align
设置图片位置排版格式,默认为left,可以为right或者center

fig.cap :设置图片的标题

fig.subcap:设置图片的副标题

若markdown内的代码块存在一样的参数设置,则可以提前设计好全局的代码块参数。全局代码块通过knitr::opts_chunk$set函数进行设置,一般设置在YAML文件下方,具体见下图。

2.2markdown的图表输出

rmarkdown生成的表格,可以通过knitr包的kable()函数进行输出。以datasets包的rock数据集为例,在rmarkdown中输出rock数据集的表格(见下图)。

text
1 2
knitr::kable(head(rock), caption = 'rock数据',align='c')

除了用knitr::kable()输出表格,还可以kableExtra、huxtable等扩展包来美化表格。本文以kableExtra包为例,大致介绍rmarkdown中渲染表格的相关函数。

设置表格的宽度

text
1 2 3 4
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
                    full_width = F)

设置表格的对齐方式

text
1 2 3 4 5
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
                    full_width = F,
                    position = "left")

设置表格的字体大小

text
1 2 3 4 5
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
                    full_width = T,
                    font_size = 20

设置表格的行与列

text
1 2 3 4 5 6 7 8 9
x_html <- knitr:: kable(head(rock), "html")
x_html <- kableExtra::kable_styling(x_html,
                           bootstrap_options = "striped",
                           full_width = T)
kableExtra::column_spec(x_html,1:2,
                  bold = T,
                  color = "white",
                  background = "#D7261E")

text
1 2 3 4 5 6 7 8 9
x_html <- knitr:: kable(head(rock), "html")
x_html <- kableExtra::kable_styling(x_html,
                           bootstrap_options = "striped",
                           full_width = T)
kableExtra::row_spec(x_html,1:2,
                  bold = T,
                  color = "white",
                  background = "#D7261E")

其它表格渲染

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
library(kableExtra)
data =  plyr::mutate(rock[1:10, ],
               perm = cell_spec(perm,"html",
               color = "white",
               bold = T,
               background = spec_color(1:10,
               end = 0.9,
               option = "A",
               direction = -1)),
  shape = ifelse(shape > 0.15,
             cell_spec(shape,
                     "html",
                     color = "white",
                     background = "#D7261E",
                     bold = T),
             cell_spec(shape, "html",
                    color = "green",
                     bold = T)))
x_html <-knitr::kable(data,"html", escape = F, align = "c")
x_html <-row_spec(x_html,0, color = "white", background = "#696969" )
kable_styling(x_html,"striped")

2.3markdown的主题格式

Rmarkdowm作为可复用报告的优秀工具,除了提供文档编辑、图表输出外,还有许多主题格式供使用者选择。除了默认的主题外,还可以通过加载prettydoc、rmdformats、tufte等包获取更多主题格式。下面我们看看几类扩展包里的主题样式。

rmdformats包

text
1 2 3 4 5 6 7 8 9 10 11 12 13
---
title: "建立你的markdown项目"
author: "R友舍"
date: "2020/9/1"
output:
  rmdformats::readthedown:
   self_contained: true
   thumbnails: true
   lightbox: true
   gallery: false
   highlight: tango
---

prettydoc包

text
1 2 3 4 5 6 7 8 9 10
---
title: "建立你的markdown项目"
author: "R友舍"
date: "2020/9/1"
output:
  prettydoc::html_pretty:
   theme: cayman
   highlight: github
---

tufte包

text
1 2 3 4 5 6 7 8
---
title: "建立你的markdown项目"
author: "R友舍"
date: "2020/9/1"
output:
  tufte::tufte_html: default
---

cerulean

text
1 2 3 4 5 6 7 8 9 10
---
title: "建立你的markdown项目"
author: "R友舍"
date: "2020/9/1"
output:
  html_document:
   theme: cerulean
   highlight: tango
---

2.4markdown的导出

rmarkdown的导出方法有两种,一种是依靠Rstudio手动导出,另一种是基于命令行的导出方式。

手动导出

手动导出方法很简单,在完成mardown编辑后,手动点击上图红圈内knit按钮,选择导出格式类型即可,Rstudio支持导出PDF、html、word三种类型。

命令行导出

命令行导出主要依靠rmarkdown::render实现,render函数主要包含如下几个参数:

input
指定需要导出的rmarkdwon文件地址

output_format
指定需要导出的文件类型,同样支持pdf、word、html等多种文件格式。若未指定output_format格式,则输出rmarkdown文件中output指定的格式类型。

3、生成可重复性报告

使用rmarkdown最大的便捷是可以作为可重复性报告模版,提高数据分析报告制作效率。使用人员可以提前制作好数据分析模版,对于同类数据分析问题,只需要自动切换数据来源,即可自动生成分析报告,极大的提高了数据分析人员的分析效率。

这里我们以datasets包为例,制作一个数据集的数据概览报告,并将该报告作为模版,对datasets包内指定数据集批量输出分析报告。

在制作可重复性报告前,首先需要建立分析模版,然后再通过自动加载数据的方式,自动化产出分析报告。首先我们先建立一份模版文件

在建立好一份分析模版后,还有两个问题需要解决:1:如何动态的将数据集传入到rmarkdown中,从而实现复用报告模版的效果;2:如何批量生成报告并导出。

要解决第一个问题,需要引用YAML里的params参数,render函数可以通过修改params参数,将数据传入rmarkdown中,从而实现动态调整rmarkdown里的数据。

如上图所示,先在YAML中设置好自定义参数名称name,然后再通过render函数将name值传入到markdown中,并通过params$name实现对数据集名称的调用。

text
1 2 3 4 5 6
name <-"airquality"
render("用rmarkdown定制你的数据分析报告/可重复分析报告/模版.Rmd",
      params = list(name=name),
      output_file = paste0(name,'数据集概览'),
      )

关于第二个问题,当设置好分析模版及依赖的参数后,只需要在rander函数外面循环传入参数即可,并将不通报告导出到指定文件夹内即可。

当我们要同时生成datasets数据集内airquality,mtcars,LifeCycleSavings三个数据集的分析报告时:

text
1 2 3 4 5 6 7 8 9
library(datasets)
name_list <-c("airquality","mtcars","LifeCycleSavings")
for(name in name_list){
  render("用rmarkdown定制你的数据分析报告/可重复分析报告/模版.Rmd",
       params = list(name=name),
       output_file = paste0(name,'数据集概览'),
  )
}

最终在目标路径下,即可看到已生成的三分报告,这样就实现了rmarkdown的重复性报告了。

往期精品(点击图片直达文字对应教程)

![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDWUpNU3k4UENBSHcxaWFjNThjOE5WYWlhOWY4UXZpYmZoNmxDaWNub3ZiQU11ZTBiOUZ2V1JtMzRpYWcvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDSE1HRmlhYUFMQ0VpYjNYWEprMUJ1dGQwZ2VBM255UDdJZ1A0eGVBSzVrbDlpY2ljVFcyMG9CYTRQUS82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDbTJ6VFFZMksxM1NuczhXSW5GRkNvUkZpYTRwVEgwQmpNVXZoMGlhNkJnVjAzaWNSU0ZrUEdxNkxRLzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDaWJpY2FkaWFpY1FpY0pQMUV5V0tYYTFjaWF0WjA3UjlBaWM4NUxCUU56OWFYVTFmM0w0WnJRVzhWQVBsQS82NDA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDY2pXckprODNVdWtqOXQwM1dqYVJHRE9OZHQzRjl1WTkwYjJJSFppYXNINmhKdWxsMGVqeTBVZy82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDZjczak1NY0t1UFJ1aWF1d0N4N0R2Q1FmajNDdDkzUU8wazdBM0JYQjdadWRwdWlhN0NyOUJ4NncvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDU3hjaWJiWXV1ZWEyaWJLUmpBM1VkYTZOcUFZS1FSMG5rWDNreVdyUjJETmp4c2tTRWdEWmdtakEvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDcmx1VEhtZmJqR3NNYmljMGVyQklFNFZQeDZuaWFqRWtLamljOE1KWlBwRk9qZDdpYkVCRDJZYXZrUS82NDA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDdlkxU1pXSlNHR0RaQkREeFBQRGJSb1lvYUZvU2ljbzlDbFpHRVBPbXNmNTFiMHhTTmhCdUE2QS82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDa2FhaEdJWEhwZnphaWNBMmJGd1pOT1Vmd3ZIVGljSEtGOGtkUkwwdUs3MXpuRVFXWENraWNLMkl3LzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDY2VCZFd3MzAyd01YNnJycnJKeUhRYTFiOUJ0MURqNmlhVDNCeUlkc1BqaWF4aWJzSnRhSWxWSzhBLzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDNlY1b1A1eXNEV0RUbkhWOEFyb21JR0t4SHI2M2F4Q0dpYlNkUmpVTzZiNHpQZnBack05eGgyZy82NDA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkdlI2SFJRQjBQOFdHWGxVV0tzZTlKaWN1b0hpYlRPSEFWOXp2OUJ6dUlmNXlrSjVOQUlMa3pSMUEvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkWExnQjA0TjEyOXpDQXBEY3FTb2hBMEFkSkN3UmZ1cVYzQVEwSGVLRXV4VW50QlVBWk1OQmljUS82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkOGI4dGxVNUIwMUlJMTF6M3Rkc3NFUmRuVXJseUlGaWF6ZlZ5UHpJMWFQWlNVMk5pYng5Wlk1dkEvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkQm1xY253Um1KajZJeWliaWJKbkVKV0p5blo4Sld3SlNIaFdsMG9sYnZtRmdOQzU3NVNNaWIxVk1BLzY0MA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkTjIxNGtVSkdGS1pveklwdm9hREwzblFnWng5NTFQbU1vNDdHWXVVbHd4aWJCTTlVd0pndHVxUS82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkWVRPeTY3dG5HTGsyd2JuWnZuSkIxZW41R3dxcWdvNUJiaWI1VzNnekhsZnVxamhTY0c4TXhQdy82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkRHg4UXFqZUFSY1gzSVI1RVNnQVdTWW5uWlZmZ0kwSEMyNWtnT0xzUXp0dzI1OUhyNmdpYWljM1EvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkSVYwbFRSbVNXQjZwWHB1NnZjYXdHb2tPcUVNYXFkTFpoMzc5QU9pYmtFVXF6NzFIaEV3RFJDdy82NDA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkWWRuUkZLVnhkZ0dyOGM4RnIyOWxCQ3lRaE5rVDJyanZQclM0M1BPRGlielVpYU5Fb2VScEo0dFEvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkbUVPRzdpYXBXN3NSVVdlaWNuM2U5ZGpFNWsyMzBhU2xkM3l6NE10bjVFdDliVlZPR0ZKOHQ1YVEvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkdDRDeXBndTNOQ05qb2JseHR3OVptMkdMdlJzT2pEbHBFT0JlTmtpYUNUbzhDOFFrdFFRSVpsQS82NDA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQemljRVkzOFp4YzVTSk1OTXJpYkROcEJkT3lpYXhsNTd6bFRuSW5NU0FpYjN6RnlHZURiSzh0NEZSRjdNejZBd1Z4Mzh0NFNHbGljYzNseWtRLzY0MA)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDeU1veFN6aWJOblBUdXpRYVRKN3gwSEZySUtrVkhoRldyelJkdFlJaHYxMXRMTkdyaWN3WXJpYWZ3LzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9CQThDV2hIUVdQd05pYzNDMWc2Q3JLdU5ZamliNklOeEI3c2ZYMmhqS1RBMGZ3TmhsazhYakNGdnJKUzBWWk04bzZXZUR4TmliMDhpYWZSRkZSRFlvRmliUm1RLzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDeHl4QlJaTXRFcFZQa1JmSXpaVWVBUDRsUVc2cXZWTGliRWlhWGljWTlaNU9MT0xzbHNMdW12a3pRLzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeVpXQW1pYWsxT2ZqeGZ4WmcxeGliaFRDZkVGcnBzTzBqZHk5NDY2V1JEVTNnNGRLV0pwalNLOE5QbDFzT2xCdUREbW1pY0JYSzlUVTcwZy82NDA)
nn 后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQeWlheW9MbmNXZ1Vac1hJSEp0NEFNOEwzTUxtQlA5SWpmTjZpYzhpYUl6Mm5Gdmh5RUtHNGdYWElpYUw2WktUS0J2UDNWRlMxcEtJWERLdncvNjQw) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CQThDV2hIUVdQdzNpYmRsSjlzaHdvOVJsVVNqckh3TGVYTlc4ejZ3ejZkNVhmWGtpY1ZtUXk3aWIxY1dtM1VGMlBieWljdGJ0ak9hYWlhVDF4QTBhT0pTQ3FBLzY0MA) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9CQThDV2hIUVdQeFNURUdpY3V1NEhIemlhWWJTZkZBR3h3ZHFSUElMMHRVTjFuNm1TRW54WjVpYm1Fek5ObnQxQzBGUlpqSkJpYWdFTWF3NHk4TXE4NGVpY3l3LzY0MA)

原文地址:https://blog.csdn.net/qazplm12_3/article/details/108396310?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168905959516800227485936%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168905959516800227485936&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-22-108396310-null-null.142^v88^control,239^v2^insert_chatgpt&utm_term=markdown