Chapter 2 Rmarkdown

Rmarkdown是Rstudio公司出品的.所有markdown的语法都支持.但是加入了很多强大的功能,因此可以做更多原生markdown无法完成的任务.成为数据分析以及报告自动化和重复化领域一个非常常用的工具.

可以参考下面的书,是rmarkdown的作者Yihui Xie写的.

https://bookdown.org/yihui/rmarkdown/installation.html

也可以查看这个视频简介.

What is R Markdown? from RStudio, Inc. on Vimeo.

2.1 安装

需要安装R和Rstudio.

如果想要转换为PDF格式,需要安装LaTex.

2.2 Rmarkdown结构

Rmarkdown可以分为三部分,分别是YAML, 文本部分以及代码块.

  1. YAML

YAML在每个rmakdown文件的最开头,定义了Markdown文件的很多性质.YAML是指YAin’t Markup Language, https://en.wikipedia.org/wiki/YAML.

YAML用---包围起来.

  1. 文本部分

YAML下面就是文本部分,其实也就是Markdown.

  1. 代码块

在Rmarkdown中,可以插入可以执行的代码块,不近包括R,还包括pyton,SQL等等.

上图显示的就是一个完整的Rmarkdown文件.

2.3 YAML

YAML是在Rmakdown中控制很多内容的部分.通过参数设置,可以控制比如输入格式,输出主题等等.

2.4 R代码块

R代码块的格式为:

可以看到,跟markdown代码块唯一的不同就是需要使用{r}来定义该代码块为R语言.除此之外,可以通过在大括号中设置一系列的参数,来控制代码块的输出.包括文本输出,图片输出以及表格输出等.

比如,可以通过设置result = 'hide'从而使文本结果不输出.也可以通过设置fig.widthfig.height来控制输出图片的宽度和高度.

另外还可以通过eval参数(evaulate)来控制代码块是否执行,如果设置为FALSE,则代码块不会执行.

比如:

下面这段代码就会执行,并输出结果.

而这段代码则不会执行

2.5 代码块参数 (Chunk options)

代码块有非常多的参数(chunk options),常用的总结如下,完整的可以在yihui xie的博客中.

https://yihui.org/knitr/options/

2.5.1 代码是否执行

  • eval:设置为TRUE或者FALSE来控制代码块是否执行.

###文本输出结果

  • echo:设置为TRUE或者FALSE,控制代码块是否显示在最终的渲染结果中.

  • results:

    • markup:mark up the results using the output hook, e.g. put results in a special LaTeX environment.

    • asis:将R原始结果输出到最终文本中.

    • hide:隐藏R执行结果,但是对error,message和warning没有作用.
  • collapse:设置为TRUE或者FALSE.用来控制文本输出结果是否和代码块混在一起.

  • warning:设置为TRUE或者FALSE.如果代码执行,是否显示其中的warning信息.

  • error:设置为TRUE或者FALSE.如果设置为TRUE,即使代码执行出现错误,仍然会输出渲染结果,如果设置为FALSE,代码执行错误,则渲染也会出错,不会在继续输出结果.

  • ‘message’: 设置为TRUE或者FALSE.代码执行时是否输出message信息.

  • include:是否将代码输出结果显示在最终的渲染输出文本中.

显示代码和输出结果:

显示代码不显示输出结果:

  • strip.white:设置为TRUE或者FALSE.是否输出在最终输出渲染结果中代码块上下的白线.

2.5.2 代码控制 (code decoration)

  • tidy:
    • TRUE:使用formatR对代码格式进行整理.
    • FALSE:保持原格式.
    • styler:使用styler包对代码格式进行整理.
  • comment:默认为##,表示对于R代码输出的文本结果前面会有##进行注释.

  • highlight:逻辑值.是否对代码进行高亮.

2.5.3 缓冲 (cache)

cache:逻辑值.是否需要缓冲代码块运行结果,对于代码运行时间比较长的rmakdown文件,可以设置为TRUE,这样重新渲染的时候,会减少运行时间.

cache.path:默认为’cache/’,设置如果缓冲为TRUE时,缓冲结果存储的文件夹位置.

2.5.4 图像控制(plot)

  • fig.path:默认为’figure/’,用来设置生成figure的存储位置.

  • fig.show:如何显示plot.

    • asis: plot在产生他们的代码后面.

    • hold:所有代码产生的图片都放在一个完整的代码块之后.

    • animate: 将所有产生的图片合成一个动画图片.

    • hide:产生所有图片,但是并不展示.

  • dpi:输出图片dpi,默认72.(dpi * inches = pixels)

  • fig.widthfig.height:输出图片宽度和高度,默认为7(单位英寸).

  • fig.asp:图片的高宽比.默认为NULL.如果设置为数值,比如设置为0.7.则fig.height会被覆盖,然后设置为fig.width*fig.asp.

  • out.widthout.height:默认为NULL.可以设置为100%,这样在最终的渲染结果中就是和页面宽度一致.

  • fig.align:图片的align位置.默认为left,可以为right或者center.

  • fig.cap:图片标题.设置为NA或者NULL,则没有.

  • fig.subcap:图片副标题.

2.6 全局代码块参数

如果某些代码块参数在全局中都是一样的,可以在全局进行设置.

在YAML下以及所有的markdown文本之上,插入下列代码块.

使用的是knitr包中的opts_chunk$set()函数.可以将比较常见常用的代码块设置在这里进行设置.这里就是全局的设置.

2.8 Rmarkdown特有语法

Rmarkdown相比markdown来说,因为可以直接运行代码,因此有一些特有的语法,比如插入图片等.

2.8.1 图片 (image)

使用knitr::include_graphics()函数可以直接插入图片,然后使用代码块参数可以对图片进行设置,宽度高度,对齐等等.

小涛

Figure 2.1: 小涛

2.8.2 表格 (Table)

  • knitr::ktable()函数
Table 2.1: A caption
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa

该函数又很多参数可以用来控制输出表格的格式,具体的可以参考帮助文档.也可以参考下面的帖子:

https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html

2.8.3 地图 (map)

使用leaflet包可以插入地图.

2.9 输出格式

2.9.1 HTML格式

Markdown最最开始就是就是为输出为HTML格式涉及的.在Rmarkdown中,如果想要输出位HTML格式,需要在YAML中将output设置为html_document即可.

  1. 目录(Table of contents)

想要给文章设置目录,可以在html_document下设置toc参数,同时也可以设置toc_depth来设置几级目录.

比如下面的例子:

如果想要让目录浮在页面上,可以设置toc_float参数.比如下面的例子:

同时toc_float参数还有自己的参数可以进行设置.

  • collapsed:逻辑值.控制目录是否可以进行折叠.

  • smooth_scroll:逻辑值.controls whether page scrolls are animated when TOC items are navigated to via mouse clicks.

例如:

  1. 标题编号(Section numbering)

可以使用number_sections参数来控制标题的编号.

例如:

  1. 外观和风格

有几个参数可以来控制HTML document的外观.

  • theme参数可以用来控制HTML document的外观和主题.来自于Bootswatch.可以选择的主题包括以下几项: default, cerulean, journal, flatly, darkly, readable, spacelab, united, cosmo, lumen, paper, sandstone, simplex, and yeti.可以点击到网站中去查看几种主题的外观.

  • highlight用来控制语法高亮的风格.包括以下几种: default, tango, pygments, kate, monochrome, espresso, zenburn, haddock, breezedark, and textmate.

  1. 表格打印

可以使用df_print参数来控制表格打印的风格.在R代码块中的数据框直接显示的风格.

  • default: 使用R中print.data.frame方法.

  • kable: 使用knitr::kable函数.

  • tibble: 使用tibble::print.tbl_df函数,

  • paged:使用rmarkdown::paged_table函数.

显示结果如下:

如果设置为kable:

如果设置为paged:

  1. 代码折叠

可以通过设置code_foldinghide,这样所有的代码默认都是折叠的,然后用户可以通过点击按钮显示某个代码块.

  1. 其他一些高级设置
  • 通过使用includes参数,可以在rmarkdown的某些位置加入一些自己设计好的HTML元素.
  • 自定义主题

如果对HTML比较熟悉,可以使用自己的主题.

2.9.2 PDF格式

Rmarkdown也可以输出为PDF格式的文档.设置output为pdf_document.

PDF格式的目录,图片设置,数据框打印,语法高亮都跟HTML相同.

2.9.3 Word格式

也可以输出为word格式,设置output为word_document.

word的格式可以使用默认的格式,当然也可以自己进行设置.设置好格式之后,使用reference_docx参数进行设置.

如何设置格式文件,可以参考下面文章:

https://rmarkdown.rstudio.com/articles_docx.html

或者看下面的视频:

Create A MS Word Template for R Markdown from Yihui Xie on Vimeo.