1. R Markdown 簡介
1.1 Markdown 簡介
Markdown是?種輕量級標記語?,它允許我們可以通過簡單的?本格式編寫?檔,語法簡單、上?容易,所以越來越多的人都在使用它,而且現(xiàn)在還有有很多可以?持Markdown編輯的應(yīng)?軟件,例如Typora、Notion等,通過這些?具可以便捷地完成Markdown編輯,并且?持導(dǎo)出PDF、HTML等多種格式。是不是覺得好像也不太常見,實則不然吶!其實我們平常經(jīng)常使用的簡書、知乎、CSDN也都支持Markdown呢!
常用語法展示:
| 名稱 | 顯示|
|:-----------|:----------|
| 常規(guī) | default|
| 斜體 | *italics* and _italics_|
| 粗體 | **bold** and __bold__|
| 上標 | superscript^2^|
| 下標 | HO~2~|
| 代碼 | `code`|
| 刪除線 | ~~strikethrough~~|
| 鏈接 | [Markdown官網(wǎng)](https://markdown.com.cn/)|
| 標題 | ## H2 |
| 短橫線 | - |
| 長橫線 | ---|
| 省略號 | ...|
| 水平線 | ***|
| 圖片 | |
| 表格 | 這不就是嘛|
| 有序列表 | 1. 第一點|
| 無序列表 | - 第一點|
效果展示如下:
| 名稱 | 顯示 |
|---|---|
| 常規(guī) | default |
| 斜體 | italics and italics |
| 粗體 | bold and bold |
| 上標 | superscript2 |
| 下標 | HO2 |
| 代碼 | code |
| 刪除線 | |
| 鏈接 | Markdown官網(wǎng) |
| 標題 | ## H2 |
| 短橫線 | - |
| 長橫線 | --- |
| 省略號 | ... |
| 水平線 | *** |
| 圖片 | ![]() mua.jpg
|
| 表格 | 這不就是嘛 |
| 有序列表 | 1. 第一點 |
| 無序列表 | - 第一點 |
深入學(xué)習(xí)Markdown詳見:https://markdown.com.cn/
1.2 R Markdown 簡介
R Markdown是R語?環(huán)境中提供的Markdown編輯?具,?R Markdown撰寫?章,既可以像?般的Markdown編輯器?樣編輯?本,也可以插?代碼塊,并將代碼運?結(jié)果輸出在Markdown?。這種格式我們稱之為R Markdown格式,簡稱為Rmd格式,相應(yīng)的源?件擴展名為.Rmd。輸出格式可以是HTML、docx、pdf等。
對于經(jīng)常使?R語?(不止R,也支持其他語言,如Python、SQL、Stan等)的人來說,比如我們,別人偶爾可能會需要復(fù)現(xiàn)我們的工作,那么這個時候,R Markdown就可以助我們一臂之力,以便于他人實現(xiàn)工作復(fù)現(xiàn)??梢哉fRmd是又便捷又實用!
- R Stidio官網(wǎng)(初步了解)
- R Markdown Cookbook(相對基礎(chǔ))
- R Markdown: The Definitive Guide(非常全面)
- R Markdown Cheat Sheet
如果上述鏈接失效,可以在這里找到你想要的噢!
2. R Markdown 的使用
2.1 安裝
R Markdown不需要R Studio,但建議使?R Studio,因為如果沒有安裝R Studio,就必須安裝Pandoc,而R Studio已和它捆綁在?起,所以無需對其進行單獨安裝。
Rstudio中安裝R Markdown軟件包,可以通過下?任意?種?式:
# from CRAN
install.packages('rmarkdown')
# install from GitHub
devtools::install_github('rstudio/rmarkdown')
library(rmarkdown)
如果要?成PDF輸出,則需要安裝LaTeX。對于從未安裝過LaTeX的R Markdown?戶,建議安裝TinyTeX:
install.packages('tinytex')
tinytex::install_tinytex()
TinyTex是謝益輝大神專為R Markdown開發(fā)的超輕量級的Latex環(huán)境,是?種輕便、可移植、跨平臺、易于維護的LaTeX發(fā)?版。R中的配套軟件包
tinytex可以幫助我們在將LaTeX或R Markdown?檔編譯為PDF時?動安裝缺少的LaTeX軟件包,并確保將LaTeX?檔編譯正確的次數(shù)以解決所有交叉引?。
2.2 新建 R Markdown
-
點擊Rstudio左上?的新建項?,選擇R markdown?件格式,就可以建??個R Markdown的編輯?件。 像這樣:
新建文件 -
在彈出的框?,可以填寫R Markdown的Title、Author以及默認的輸出?件格式,?般可以選擇HTML、PDF、Word格式。
創(chuàng)建界面 -
在新建的R Markdown?件?,主要包含三塊內(nèi)容:1.YAML;2.R Markdown?本;3.代碼塊。
文件界面
- YAML ------ R Markdown的頭部?件(紅),YAML定義了R Markdown的性質(zhì),?如title、author、date、指定 output?件類型等。
- Markdown文本 ------ Markdown?本是R Markdown?的主要內(nèi)容(黃),是使用者按照Markdown語法??編寫的?本內(nèi)容。
- 代碼塊 ------ R Markdown的?個主要功能是可以執(zhí)??件內(nèi)的代碼塊(藍),并且將代碼執(zhí)?結(jié)果展?在Markdown?。這對撰寫分析報告帶來了極?滴便利。Rmd?件中除了R代碼段以外, 還可以插?Python、SQL等許多編程語?的代碼段,常?編程語?還可以與R代碼段進?信息交換。
- R studio 界面簡單介紹
詳見視頻演示
2.3 R Markdown 的導(dǎo)出
導(dǎo)出方法:
- 手動
- 命令行
2.3.1 手動導(dǎo)出
?動點擊Knit按鈕,選擇導(dǎo)出格式類型即可,Rstudio?持導(dǎo)出PDF、html、word三種類型。

界面如下:

2.3.2 命令行導(dǎo)出
命令?導(dǎo)出主要依靠render實現(xiàn),render函數(shù)主要包含下面兩個參數(shù):
-
input:指定需要導(dǎo)出的Rmd?件地址 -
output_format:指定需要導(dǎo)出的?件類型,同樣?持pdf、word、html等多種?件格式。若未指定output_format格式,則輸出Rmd?件中output指定的格式類型。
render("FileName.Rmd")
render(input = "./save/path/FileName.Rmd", output_format = "html_document")
2.4 代碼輸出
2.4.1 行內(nèi)代碼
詳見視頻演示
- 我們?nèi)绻M敵鲂袃?nèi)代碼,只需要將需要輸出的代碼用一對反引號``包括起來即可,像這樣:
r sum(1:5)`
- 也可以文本結(jié)合代碼,如下:
數(shù)據(jù)之和為x <- rnorm(5)
- 更高階的還有,比如:
date: `r Sys.Date()`
date: 最近更新日期為`r format(Sys.time(), '%d %B, %Y')`
這樣我們就可以隨著我們編輯文檔的時間動態(tài)生成日期。除了上面的寫法,還可以這樣:
-
%B %Y: November 2022 -
%d/%m/%y: 07/11/22 -
%a/%d/%b: Mon 07 Nov
2.4.2 代碼塊
R代碼塊?般通過{r}來插?,也可以使用快捷鍵:Ctrl+Alt+I / option + cmd + I,也可以直接點擊右上方綠色的+C。
詳見視頻演示
默認情況下代碼和結(jié)果會在輸出?件中呈現(xiàn)。如果通過參數(shù)來控制代碼塊運?結(jié)果的輸出情況可以在{r}中設(shè)置。?般包括代碼及運?結(jié)果的輸出、圖?表格格式定義等。
2.4.2.1 通過選項設(shè)置參數(shù)
輸出信息選項
eval: 加選項eval=FALSE,可以使得代碼僅顯??不實際運?。這樣的代碼段如果有標簽,可以在后續(xù)代碼段中被引?。include: 加選項include=FALSE,則本代碼段僅運?,但是代碼和結(jié)果都不寫?到?成的?檔中。echo:echo參數(shù)控制了Markdown是否顯?代碼塊。若echo=TRUE,則表?代碼塊顯?在markdown?檔顯?代碼塊;反之,代碼塊不出現(xiàn)在輸出結(jié)果中。collapse: ?個代碼塊的代碼、輸出通常被分解為多個原樣?本塊中,如果?個代碼塊希望所有的代碼、輸出都寫到同?個原樣?本塊中,加選項collapse=TRUE。prompt:prompt=TRUE代碼?R的>提?符開始。comment:如果希望結(jié)果不?#號保護,使?選項comment=''。-
results: ?選項results=選擇?本型結(jié)果的類型。取值有:-
markup,這是缺省選項,會把?本型結(jié)果變成HTML的原樣?本格式; -
hide,運?了代碼后不顯?運?結(jié)果; -
hold,?個代碼塊所有的代碼都顯?完,才顯?所有的結(jié)果。 -
asis,?本型輸出直接進?到HTML?件中,這需要R代碼直接?成HTML標簽,knitr包的kable()函數(shù)可以把數(shù)據(jù)框轉(zhuǎn)換為HTML代碼的表格。
-
錯誤信息選項
warning,選項warning=FALSE使得代碼段的警告信息不進?編譯結(jié)果,?是在控制臺中顯?。有?些擴展包的載?警告可以?這種辦法屏蔽。error,選項error=FALSE可以使得錯誤信息不進?編譯結(jié)果,?是出錯停?并將錯誤信息在控制臺中顯?。message,選項message=FALSE可以使得message級別的信息不進?編譯結(jié)果,?是在控制臺中顯?。
全局設(shè)置
若R Markdown內(nèi)的代碼塊存在?樣的參數(shù)設(shè)置,則可以提前設(shè)計好全局的代碼塊參數(shù)。全局代碼塊通過knitr::opts_chunk$set函數(shù)進?設(shè)置,?般設(shè)置在YAML?件下?。注:局部參數(shù)設(shè)置優(yōu)先級大于全局參數(shù)設(shè)置。
knitr::opts_chunk$set(echo = TRUE)
2.4.2.2 R studio 界面直接設(shè)置參數(shù)(部分但便捷)

2.5 圖片輸出
詳見視頻演示
2.5.1 插?內(nèi)部代碼?成的圖形
-
fig.show:設(shè)置了圖?輸出?式-
fig.show=‘a(chǎn)sis’:表?plot在產(chǎn)?他們的代碼后? -
fig.show=‘hold’:所有代碼產(chǎn)?的圖?都放在?個完整的代碼塊之后 -
fig.show=‘a(chǎn)nimate’:表?將所有?成的圖?合成?個動畫圖?- 需要進行一些設(shè)置,詳見https://bookdown.org/yihui/rmarkdown-cookbook/animation.html
-
fig.show=‘hide’:表?產(chǎn)?所有圖?,但是并不展?
-
-
fig.width:設(shè)置圖?輸出的寬度 -
fig.height:設(shè)置圖?輸出的?度- 也可直接在R studio界面進行設(shè)置
-
fig.align:設(shè)置圖?位置排版格式,默認為left,可以為right或者center -
fig.cap:設(shè)置圖?的標題 -
fig.subcap:設(shè)置圖?的副標題 -
out.width和out.height選項指定在輸出中實際顯?的寬和?,如果使?如"90%"這樣的百分數(shù)單位則可以?適應(yīng)輸出的??。
2.5.2 插?外部圖形
圖片不是由R代碼生成,有兩種方法插入:
- 使?Markdown語法
[圖片上傳失敗...(image-5cc1e7-1669694667073)],你可以使?width和height屬性來設(shè)置圖像的??。
{width=50%}
注意:圖??件放的位置(如果和Rmd同??錄,可以直接xxx.png;如果在其他位置要加上相對路徑)。
-
在
visual狀態(tài)下,直接外部拉?圖形即可,會?動保存在相對?件夾的images文件夾中,或者點擊圖形按鈕導(dǎo)?。
插入外部圖形 在代碼塊中使?
knitr函數(shù)knitr::include_graphics()。圖?尺?更改與插?R代碼?成的圖形的情況相同。
knitr::include_graphics("./pictures/inputfig.png")
2.6 表格輸出
詳見視頻演示
2.6.1 插入外部表格
- 采用Markdown形式即可,如下:
|表頭|第二列|第三列|
|:--|:--|:--|
|第一行|1|2|
|第二行|4|3|
|第三行|5|6|
效果展示:
| 表頭 | 第二列 | 第三列 |
|---|---|---|
| 第一行 | 1 | 2 |
| 第二行 | 4 | 3 |
| 第三行 | 5 | 6 |
表格前面加回車,不然無法展示(項目符號同)。
如果在表格中插入一個|,表格就會混亂,因為它無法正確區(qū)別這個|是屬于表格的一部分還是僅僅只是表示|。如下:
|表頭|第二列|第三列|
|:--|:--|:--|
|第一行|a|b|2|
|第二行|4|3|
|第三行|5|6|
錯誤效果展示:
| 表頭 | 第二列 | 第三列 |
|---|---|---|
| 第一行 | a | b |
| 第二行 | 4 | 3 |
| 第三行 | 5 | 6 |
在表格中可以使用|(|結(jié)尾要加個分號;)來表示|。
|表頭|第二列|第三列|
|:--|:--|:--|
|第一行|a|b|2|
|第二行|4|3|
|第三行|5|6|
正確效果展示:
| 表頭 | 第二列 | 第三列 |
|---|---|---|
| 第一行 | a|b | 2 |
| 第二行 | 4 | 3 |
| 第三行 | 5 | 6 |
- 在
visual狀態(tài)下,可直接操作R Studio界面進行表格插入與設(shè)置,如下:
插入外部表格
設(shè)置插入表格
表格效果展示
2.6.2 插入內(nèi)部代碼生成的表格
詳見視頻演示
- 我們可以使用
knitr包的kable函數(shù),可以?來把數(shù)據(jù)框或矩陣轉(zhuǎn)化成有格式的表格,?持HTML、docx、LaTeX等格式。
knitr::kable(exp_table)
格式調(diào)整詳見參數(shù),比如:digits設(shè)置小數(shù)點后位數(shù),align設(shè)置排列方式。
-
pander包的pander函數(shù)也可以將多種R輸出格式轉(zhuǎn)換成knitr需要的表格形式。
pander::pander(exp_table)
pander包在表中有中文時會出錯。
- 其他包:
tables,tangram,ztable,condformat等等......
2.6.3 表格渲染
通過前?可以看到:?knitr::kable()輸出表格結(jié)果其實不是?常美觀,并且很多功能都不能實現(xiàn)。這時我們可以?kableExtra、huxtable等擴展包來美化表格,對字體大小、對齊方式、邊框底紋、選擇高亮等等進行設(shè)置。
kableExtra包的使用,詳見:
- 幫助文檔
- or https://bookdown.org/yihui/rmarkdown-cookbook/kableextra.html
- or https://haozhu233.github.io/kableExtra/。
更多包盡見:https://bookdown.org/yihui/rmarkdown-cookbook/table-other.html
3. R Markdown 的主題
R Markdowm作為制作可重復(fù)性報告的優(yōu)秀?具,除了提供?檔編輯、圖表輸出外,還有許多主題格式供我們選擇。除了默認主題外,還可以通過加載rticles、prettydoc、rmdformats、tufte、cerulean等包獲取更多主題格式。下?我們看看?類擴展包?的主題樣式。
記得先安裝!
詳見視頻演示
rticles可以更好地進行PDF及其他格式導(dǎo)出,其他包更適用于HTML格式導(dǎo)出。
- 官網(wǎng):https://github.com/rstudio/rticles
- 教程:https://bookdown.org/yihui/rmarkdown/rticles-templates.html
參考資料
- https://www.bilibili.com/video/BV1ib4y1X7r9
- https://rmarkdown.rstudio.com/lesson-1.html
- https://www.bookstack.cn/read/rmarkdown-cookbook-1.0-en/5d40b1b09165871a.md
- https://bookdown.org/yihui/rmarkdown/
- http://www.itdecent.cn/p/4705a1dc8e5a
- http://www.itdecent.cn/p/f71fac797a6c
- https://markdown.com.cn/cheat-sheet.html







