全文1.5k字,预计阅读时间40分钟。 建议结合b站的视频一起学习。
本文的框架
第 1 章:Rmarkdown 简介
Rmarkdown是R语言环境下提供的Markdown编辑工具。 使用rmarkdown写文章,你可以像普通markdown编辑器一样编辑文本,也可以在rmarkdown中插入代码块,并在markdown中输出代码运行结果。 R Markdown 格式,简称 Rmd 格式,对应的源文件扩展名为 .Rmd。 输出格式可以是HTML、docx、pdf、beamer等。
前面的介绍参考:李东风老师的《R语言教程》[1]。
对于专注于用R语言编写报告的数据分析师来说,rmarkdown不仅增强了数据分析工作的便利性,还提高了数据分析报告的复用性。 Markdown教程和相应的编辑器介绍可以参见:(可跳转)本期主要介绍Rmarkdown。
1.1官网视频介绍
首先我们通过官方视频来看看Rmarkdown的介绍[2]。
注:本视频来自官网,不一定能打开,所以我下载给大家看,以便大家更好的学习。
视频已经很清楚地介绍了如何使用Rmarkdown,它的内部结构,不同的输出类型,以及其他扩展(发布、连接github)等。我们先对此进行一个简单的了解,我会在后面详细介绍接下来的几个问题。 当然,官网也有一套Rmarkdown的入门教程。 欢迎您前来学习。 官网截图如下:
其他参考资料可以在这条推文中找到: 有关knitr 的详细文档,请参阅网站knitr 文档[3]。 有关 R Markdown 的信息,请参阅著作 (Xie, Allaire, and Grolemund 2019[4]) 和 (Xie, Dervieux, and Riederer2020[5])。
RStudio 网站提供 R Markdown 备忘单下载。 您可以在公众号后台回复备忘单,获取包括rmarkdown在内的备忘单。 Pandoc 的文档可以在 pandoc 网站上找到 [6]。
本期内容不多。 主要介绍了Rmarkdown的基本概念,并给出了一些参考资料。 下一期将逐步学习Rmarkdown。
第2章:Rmarkdown流程演示 2.1. 安装
假设您已安装 R[7] (R Core Team 2020) 和 RStudio IDE[8]。
RStudio 不是必需的,但建议使用它,因为它使普通用户更容易使用 R Markdown。 如果未安装 RStudio IDE,则必须安装 Pandoc(),否则无需单独安装 Pandoc,因为 RStudio 已将其捆绑在一起。
接下来,在Rstudio中安装rmarkdown软件包,可以通过以下任意一种方式完成:
# Install from CRAN
install.packages('rmarkdown')
# Or if you want to test the development version,
# install from GitHub
if (!requireNamespace("devtools"))
install.packages('devtools')
devtools::install_github('rstudio/rmarkdown')
如果你想生成PDF输出,你需要安装LaTeX。 对于没有安装LaTeX的R Markdown用户,建议安装TinyTeX[9]:
install.packages('tinytex')
tinytex::install_tinytex() # install TinyTeX
TinyTeX 是一个轻量级、可移植、跨平台、易于维护的 LaTeX 发行版。 R 配套软件包tinytex 可以帮助您在将LaTeX 或R Markdown 文档编译为PDF 时手动安装缺少的LaTeX 软件包,并确保LaTeX 文档被编译正确的次数以解决所有交叉引用。
注:如果通过前面的代码很难正常安装TinyTex,可以参考张景新老师的知乎文章:搭建Latex环境:TinyTex+RStudio。 如果编译.rmd格式时缺少个别Latex包,可以参考本节。
2.2. 创建一个新的Rmarkdown项目
点击Rstudio左上角的New Project,选择Rmarkdown文件格式,构建rmarkdown编辑文件。
创建新流程
在弹出的选项框中,可以声明rmarkdown的标题、作者和默认输出文件格式。 一般来说,您可以选择 HTML、PDF 和 Word 格式。 详细信息请参见右图。
新创建的markdown文件主要包含三部分内容:1).YAML,2).markdown文本,3).code块。
rmd主要包含
1)YAML:是Rmarkdown的肚皮文件(上图中的位置1)。 YAML定义了rmarkdown的属性,例如标题、作者、日期、指定的输出文件类型等。
2)Markdown文本:是rmarkdown中的主要内容(上图中的位置3)。 编辑者根据Markdown句型自行编译文本内容。
3)代码块:rmarkdown的主要功能之一就是执行文件中的代码块(上图中的位置2),并在markdown中显示代码执行结果。 这给数据分析报告的编写带来了极大的方便。 除了 R 代码段之外,Rmd 文件还可以插入 Rcpp、Python、Julia 和 SQL 等多种编程语言的代码段。 常用的编程语言也可以与R代码段交换信息。
这三个部分稍后会详细介绍。
2.3. 导入Rmarkdown
导入rmarkdown有两种方法,一种是使用Rstudio自动导入,另一种是基于命令行的导入方法。
手动导入
手动导入
手动导入方法非常简单。 完成mardown编辑后,手动点击上图红圈处的knit按钮,选择导入格式类型。 Rstudio 支持导入三种类型:PDF、html 和 word。
命令行导入
命令行导入主要通过rmarkdown::render实现。 render函数主要包含以下参数:
rmarkdown::render("test.Rmd")
2.4. Rstudio界面介绍
此时,Rstudio的界面发生了一些变化。 我们将对界面进行一些介绍,特别是最新版本的新功能。 视频介绍已在b站更新(公众号不能翻倍)。
演示的Rstudio版本是4.0.3
第 3 章:图、表和代码输出 3.1 代码输出 1. 内联代码
`r sin(pi/2)`
有趣的案例:
1)自动更新日期
date: "`r Sys.Date()`"
date: "`r format(Sys.time(), '%d %B, %Y')`"
date: "Last compiled on `r format(Sys.time(), '%d %B, %Y')`"
具体详情请参考:
2)文本与代码结合
这里一共有`r sum(x)`个人。
2. 代码块
R代码块通常通过{R}插入,插入代码段的快捷键为:win[Ctrl+Alt+I] / mac[option + cmd + I]。 其他快捷键的介绍请看这条推文:。
默认情况下,代码和结果呈现在输出文件中。 如果使用参数来控制代码块执行结果的输出,可以在{r}中设置。 一般包括代码和运算结果的输出、图表格式定义等。代码片段选项详见。
这里小编给出了一些常用的选项。 如果文字版难以理解,请配合我在b站的视频教程。
```{r echo=FALSE}
print(1:5)
```
结果是:
## [1] 1 2 3 4 5
```{r collapse=TRUE}
sin(pi/2)
cos(pi/2)
```
结果是:
sin(pi/2)
## [1] 1
cos(pi/2)
## [1] 6.123032e-17
代码和结果位于纯文本块中。
结果是:
> sum(1:5)
[1] 15
使用选项 results= 选择文本结果的类型。 值为:
例如: results='hold' 示例:
```{r collapse=TRUE, results='hold'}
sin(pi/2)
cos(pi/2)
```
结果是:
sin(pi/2)
cos(pi/2)
## [1] 1
## [1] 6.123032e-17
选项 warning=FALSE 导致该代码段的警告消息不包含在编译结果中,而是显示在控制台中。 某些扩展包存在加载警告,可以使用这些方法来抑制这些警告。
选项error=FALSE可以使错误信息不进入编译结果,而是停止错误并在控制台上显示错误信息。
选项message=FALSE可以导致消息级信息不包含在编译结果中,而是显示在控制台上。
当然,还有图片的设置,我们下面会讨论。
当然,你也可以通过Rstudio界面设置一些参数(更方便):
具体演示可以参见【b站】视频。
如果markdown中的代码块参数设置相同,则可以提前设计全局代码块参数。 全局代码块是通过`knitr::opts_chunk$set函数设置的。 一般设置在YAML文件下面。 详细信息请参见右图。
3.2. 图片输出 1.插入R代码生成的图形
```{r, fig.height = 8,fig.with = 6}
plot(1:10)
```
Fig.show:设置图像输出格式
```{r, fig.show='animate'}
for (i in 1:2) {
pie(c(i %% 2, 6), col = c('red', 'yellow'), labels = NA)
}
Fig.width:设置图像输出的长度
Fig.height:设置图像输出的高度
Fig.align 设置图像位置布局格式。 默认为左,可以是右,也可以是居中。
Fig.cap:设置图片标题
Fig.subcap:设置图片的副标题
out.width 和 out.height 选项指定输出中显示的实际宽度和高度。 如果您使用“90%”等百分比单位,您可以手动调整输出的大小。
2.插入外部图形文件
如果绘图不是由 R 代码块生成的,您可以通过两种方式包含它:
使用Markdown句型!(path/to/image)html留言框,可以使用width和height属性来设置图像的大小,例如:
![图的标题](xxx.png){width=50%}
注:图片文件放置的位置(如果和rmd在同一个目录,可以直接xxx.png;如果在其他位置,记得加上相对路径)。
在源码编辑器中,可以直接从外部拉入图形,并手动保存到相应文件夹的images文件中,或者点击图形按钮导出。
在代码块中使用knitr函数knitr::include_graphics()。 图像规格修改与插入R代码生成的图形相同。
```{r, echo=FALSE , out.width="50%"}
knitr::include_graphics("xxx.png")
```
3.3. 表单输出 1.外部表单输入
2、内码输出表
示例:计算线性回归后,summary()函数的输出有一个系数项,它是一个矩阵。 直接将其显示为文本会很难看:
x <- 1:10; y <- x^2; lmr <- lm(y ~ x)
co <- summary(lmr)$coefficients
print(co)
knit 包提供了 kable() 函数,可用于将数据框或矩阵转换为格式化表格,支持 HTML、docx、LaTeX 等格式。
可以使用knitr包的kable函数来显示:
knitr::kable(co)
kable()函数的digits=选项可以控制小数点后的位数,caption=选项可以指定表格的标题内容。
其pander()函数可以将各种R输出格式转换为knitr.like所需的表格格式
pander::pander(lmr)
但经过实验,发现pander包在表格中有英文时会出错。 这里参考公众号【R Youshe】
其他软件包:tables (Murdoch 2020[10])、pander (Daróczi and Tsegelskyi 2018[11])、tangram (Garbett 2020[12])、ztable (Moon 2020[13]) 和 condformat (Oller Moreno 2020[14]) )。等待
3.4.表格渲染
从上面可以看出:虽然使用knitr::kable()输出的表格结果不是很漂亮,但是很多功能都无法实现。 这时,我们可以使用kableExtra(Zhu 2020[15])和huxtable(Hugh-Jones 2020[16])等扩展包来美化表格。
其他扩展包请参考:
本文以kableExtra包为例,介绍rmarkdown中渲染表格的相关功能。 它有大量关于 的文档,其中提供了许多如何为 HTML 或 LaTeX 输出自定义 kable() 输出的示例。 建议阅读其文档,本节仅介绍一些示例。
kableExtra 包可以使用管道符号 %>% 操作,例如
library(knitr)
library(kableExtra)
kable(iris) %>%
kable_styling(latex_options = "striped")
安装
# install from CRAN
install.packages("kableExtra")
# install the development version
remotes::install_github("haozhu233/kableExtra")
1. 桌框设置
bootstrap_options = "bordered" 构建一个有边框的表。 其他可调整的名称可以从帮助文档中获得。
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "bordered")
2.设置表格长度
使用 full_width = F 可以防止表格垂直填满整个页面。 默认情况下 full_width = T
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
full_width = F)
注意:在上面的示例 knitr::kable 中,kable 函数来自 knit 包。 目的是该方法与其他包中的同名函数冲突。
另一种写法,如果要使用管道功能,则需要加载kableExtra。 其他代码大同小异,大家要学会举一反三!
library(knitr)
library(kableExtra)
kable(head(rock), "html") %>%
kable_styling(x_html,bootstrap_options = "striped",
full_width = F)
3.设置表格对齐方式
使用position = "left" 使整个表格向左对齐。 当然也可以居中或右对齐,视情况而定。
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
full_width = F,
position = "left")
4.设置表格的字体大小
使用 font_size=20 将字体大小更改为 20。
x_html <- knitr:: kable(head(rock), "html")
kableExtra::kable_styling(x_html,bootstrap_options = "striped",
full_width = T,
font_size = 20
5.设置表格的行和列
这里使用的函数是column_spec(),其中下面代码的含义是:制定前两列数据,字体加粗,颜色为蓝色,表格填充“#D7261E”。 行的设置与列类似,使用名为 row_spec() 的函数。
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")
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")
6.其他表格渲染
这是一个有趣的例子。 里面的细节我就不做过多解释了。 b站视频给出了解释。 真的很难用言语来解释哈哈。
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")
第4章:Rmarkdown主题格式
作为可重用报表的优秀工具,Rmarkdowm不仅提供文档编辑和图表输出,还拥有多种主题格式供用户选择。 除了默认主题外,还可以通过加载articles、prettydoc、rmdformats、tufte等包来获取更多主题格式。 我们来看看几种类型的扩展包中的主题。
注意:我已经在下面的教程中安装了这个包。 如果你还没有安装的话,记得提前安装哦! 否则,操作就会出错。
4.1.ricles包
官方网站:;
具体教程:
文章包为各种期刊和出版商提供了模板:
这里仅演示以下模板。 其他模板的操作类似,但通常模板不能包含英文字体!
下载对应的包后,找到对应的模板并打开即可。 输出pdf需要配置tex环境! 建议安装Tinytex。 详细安装教程请参见上面。
编译后得到的结果,这就是他的模板的原貌。 如果你想调整页面线宽、字体颜色等,请看上一条推文(公众号:庄兴山的R语言指南),我会用这个小细节进行总结。
4.2.rmdformats包
以下包内包含许多模板。 以下 yaml 文件只是其中之一。 如果你想尝试包内的其他模板,请按照上面的操作,选择模板,编译看看是不是你想要的。 所需的模板。
接下来我会展示一些比较好的模板。 您可以直接将我的脸部文件复制为.rmd格式,或者打开模板窗口进行选择(操作如下)。
---
title: "Rmarkdown入门教程"
author: "庄闪闪的R语言手册"
date: "2/18/2021"
output:
rmdformats::readthedown:
self_contained: true
thumbnails: true
lightbox: true
gallery: false
highlight: tango
---
方法二:
安装完包后,就可以使用按钮来创建模板了(其实他有很多类似的模板,我这里只重点介绍了一个):
通过这些方法也可以创建以下模板,前提是您已经安装了这个包,这样您就可以在From Template中找到该包对应的模板。
4.3.prettydoc包
---
title: "Rmarkdown入门教程"
author: "庄闪闪的R语言手册"
date: "2/18/2021"
output:
prettydoc::html_pretty:
theme: cayman
highlight: github
---
4.4.簇绒封装
---
title: "Rmarkdown入门教程"
author: "庄闪闪的R语言手册"
date: "2/18/2021"
output:
tufte::tufte_html: default
---
4.5.cerulean包
---
title: "Rmarkdown入门教程"
author: "庄闪闪的R语言手册"
date: "2/18/2021"
output:
html_document:
theme: cerulean
highlight: tango
---
第五章:一些常用方法总结
关于RMarkdown的使用,我会分享一些我日常使用的有用方法。 当然,我也学习了谢大大的Rmarkdown-cookbook[17],并在网上搜索了日常使用需求的解决方案。 我想在这里与大家分享。 如果您还有其他需求,可以在留言板上留言。 如果你还有其他实用的方法,欢迎分享!
5.1. 修改个别字体颜色
Markdown句型没有外部修改文本颜色的方式。我们可以使用HTML和LaTeX句型来修改短语的格式
** 以修改PDF文本颜色为例:**
我是textcolor{blue}{庄闪闪}呀!欢迎关注我的textcolor{red}{公众号}:textcolor{blue}{庄闪闪的R语言手册}。
在前面的示例中,第一组大括号包含所需的文本颜色,第二组大括号包含应应用此颜色的文本。
5.2. 更改全文页边距等。
例如,将几何命令添加到顶层
---
title: "RMarkdown常用技巧"
author:
- 庄闪闪
documentclass: ctexart
geometry: "left=2cm,right=2cm,top=2cm,bottom=2cm"
output:
rticles::ctex:
keep_tex: true
includes:
in_header: columns.tex
fig_caption: yes
number_sections: yes
toc: yes
---
此时的页边距会是这样的:
当然全文字体大小等操作也是这样操作的。 您可以在几何中操作它:
5.3. 缩进文本
默认情况下,Markdown 也会忽略用于缩进的空格。 然而,在个别情况下,例如在经文和地址中,我们可能希望保留缩进。 在这种情况下,我们可以通过以竖线(|)开始行来使用行块。 换行符和所有前导空格将保留在输出中。 例如:
| When dollars appear it's a sign
| that your code does not quite align
| Ensure that your math
| in xaringan hath
| been placed on a single long line
输出是:
5.4. 分页
如果想要分页,可以使用newpage。例如:如果想要将目录和正文分开,可以在正文后面添加这段代码
此时的输出结果是目录的界面和文本的新页面。
5.5. 控制文本输出的长度
有时,R 代码输出的文本可能太宽。 如果输出文档具有固定的页长(例如 PDF 文档),则文本输出可能会超出页边距。
R 全局选项 length 可用于控制 R 函数输出文本的长度。 如果默认值太大,您可以尝试使用较小的值。 该选项通常表示每行的缩写字符数。 例如:
```{r}
options(width = 300)
matrix(runif(100), ncol = 20)
```
```{r}
options(width = 60)
matrix(runif(100), ncol = 20)
```
然而,这些方法不一定适用于所有功能。 您可以使用其他方法。 对于Html(这里不解释html留言框,主要是pdf),可以参考教程[18]。
对于 PDF 输出,换行更加困难。 一种解决方案是使用 LaTeX 包清单,可以通过 Pandoc 参数 --listings 启用它。 然后,您必须为此包设置一个选项,并且可以包含来自外部 LaTeX 文件的设置代码(有关详细信息,请参阅第 6.1[19] 节),例如,
---
output:
pdf_document:
pandoc_args: --listings
includes:
in_header: preamble.tex
---
在 preamble.tex 中(建议与 rmd 放在同一文件夹中),我们设置 Listings 包的一个选项:
lstset{
breaklines=true
}
这是输出结果,但毕竟不是很美观。
5.6. 控制图像输出尺寸
我在手稿和教程中已经说得很清楚了。 有两种形式:
方法一:
```{r, echo=FALSE, out.width="50%", fig.cap="A nice image."}
knitr::include_graphics("foo/bar.png")
```
方法二:
![A nice image.](foo/bar.png){width=50%}
5.7. 图像对齐
这句话我也说过了! 只需要在R块中添加fig.align = 'center'即可使其居中。无需在markdown中输入外部数据。 您可以在 R 代码块中使用它。
knitr::include_graphics()
详情请看:以及我在b站的视频。
5.8. 代码块的行号
通过块选项 attr.source=".numberLines" 将行号添加到源代码块,或通过 attr.output=".numberLines" 将文本输出块添加到文本,例如
```{r, attr.source='.numberLines'}
if (TRUE) {
x = 1:10
x + 1
}
```
输出是:
5.9.多列输出
这非常有用! 虽然学起来有点困难,但我会再发一条推文来解释清楚。 有关详细信息,请参阅此处的教程 [20]。 类似于以下方式格式化:
5.10. 小编有话要说
参考
[1]
《R语言教程》:
[2]
官方视频:
[3]
针织文档:
[4]
谢、阿莱尔和格罗蒙德:#ref-Xie2019:rmarkdown
[5]
谢、Dervieux 和 Riederer:#ref-Xie2020:rmd-cook
[6]
潘多克网站:
[7]
回复:
[8]
RStudio 集成开发环境:
[9]
小特克斯:
[10]
默多克 2020:#ref-R-tables
[11]
Daróczi 和 Tsegelskyi 2018:#ref-R-pander
[12]
加贝特 2020:#ref-R-七巧板
[13]
2020 年月球:#ref-R-ztable
[14]
奥勒·莫雷诺 2020:#ref-R-condformat
[15]
朱 2020:#ref-R-kableExtra
[16]
休-琼斯 2020:#ref-R-huxtable
[17]
Rmarkdown 食谱:
[18]
教程:
[19]
6.1LaTeX包列表:#latex-preamble
[20]
多列输出教程:
注:如果你觉得文字太难,上面提到的一切都可以在我的b站视频中学习。 您可以将以下照片保存并扫描b站二维码,或者在b站搜索【庄兴山】观看Rmarkdown系列视频教程。 Rmarkdown 视频中添加了两个新视频(Sharingan 幻灯片制作)。 如果需要视频中的文档,可以在公众号回复【rmarkdown】
文末的相关推荐提供了一些关于Rmarkdown的扩展教程,包括制作幻灯片、beamer等,如果你喜欢,可以阅读。