R Markdown 的使用|保姆級教程

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 |
| 短橫線      | - |
| 長橫線      |  ---|
| 省略號      | ...|
| 水平線      | ***|
| 圖片        | ![caption](pictures/mua.jpg)|
| 表格        | 這不就是嘛|
| 有序列表    | 1.  第一點|
| 無序列表    | -   第一點|

效果展示如下:

名稱 顯示
常規(guī) default
斜體 italics and italics
粗體 bold and bold
上標 superscript2
下標 HO2
代碼 code
刪除線 strikethrough
鏈接 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是又便捷又實用!

如果上述鏈接失效,可以在這里找到你想要的噢!

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

  1. 點擊Rstudio左上?的新建項?,選擇R markdown?件格式,就可以建??個R Markdown的編輯?件。 像這樣:


    新建文件
  2. 在彈出的框?,可以填寫R Markdown的Title、Author以及默認的輸出?件格式,?般可以選擇HTML、PDF、Word格式。


    創(chuàng)建界面
  3. 在新建的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代碼段進?信息交換。
  1. R studio 界面簡單介紹

詳見視頻演示

2.3 R Markdown 的導(dǎo)出

導(dǎo)出方法:

  • 手動
  • 命令行

2.3.1 手動導(dǎo)出

?動點擊Knit按鈕,選擇導(dǎo)出格式類型即可,Rstudio?持導(dǎo)出PDF、html、word三種類型。

導(dǎo)出文件

界面如下:
導(dǎo)出界面

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)代碼

詳見視頻演示

  1. 我們?nèi)绻M敵鲂袃?nèi)代碼,只需要將需要輸出的代碼用一對反引號``包括起來即可,像這樣:
r sum(1:5)`
  1. 也可以文本結(jié)合代碼,如下:
數(shù)據(jù)之和為x <- rnorm(5)
  1. 更高階的還有,比如:
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ù)(部分但便捷)

導(dǎo)出界面

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’:表?將所有?成的圖?合成?個動畫圖?
    • 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.widthout.height選項指定在輸出中實際顯?的寬和?,如果使?如"90%"這樣的百分數(shù)單位則可以?適應(yīng)輸出的??。

2.5.2 插?外部圖形

圖片不是由R代碼生成,有兩種方法插入:

  1. 使?Markdown語法[圖片上傳失敗...(image-5cc1e7-1669694667073)],你可以使?width和height屬性來設(shè)置圖像的??。
![caption](xxx.png){width=50%}

注意:圖??件放的位置(如果和Rmd同??錄,可以直接xxx.png;如果在其他位置要加上相對路徑)。

  1. visual狀態(tài)下,直接外部拉?圖形即可,會?動保存在相對?件夾的images文件夾中,或者點擊圖形按鈕導(dǎo)?。

    插入外部圖形

  2. 在代碼塊中使?knitr函數(shù)knitr::include_graphics()。圖?尺?更改與插?R代碼?成的圖形的情況相同。

knitr::include_graphics("./pictures/inputfig.png")

2.6 表格輸出

詳見視頻演示

2.6.1 插入外部表格

  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

在表格中可以使用&#124(&#124結(jié)尾要加個分號;)來表示|

    |表頭|第二列|第三列|
    |:--|:--|:--|
    |第一行|a&#124;b|2|
    |第二行|4|3|
    |第三行|5|6|

正確效果展示:

表頭 第二列 第三列
第一行 a|b 2
第二行 4 3
第三行 5 6
  1. visual狀態(tài)下,可直接操作R Studio界面進行表格插入與設(shè)置,如下:
    插入外部表格

    設(shè)置插入表格

    表格效果展示

2.6.2 插入內(nèi)部代碼生成的表格

詳見視頻演示

  1. 我們可以使用knitr包的kable函數(shù),可以?來把數(shù)據(jù)框或矩陣轉(zhuǎn)化成有格式的表格,?持HTML、docx、LaTeX等格式。
knitr::kable(exp_table)

格式調(diào)整詳見參數(shù),比如:digits設(shè)置小數(shù)點后位數(shù),align設(shè)置排列方式。

  1. pander包的pander函數(shù)也可以將多種R輸出格式轉(zhuǎn)換成knitr需要的表格形式。
pander::pander(exp_table)

pander包在表中有中文時會出錯。

  1. 其他包:tables,tangram,ztable,condformat等等......

2.6.3 表格渲染

通過前?可以看到:?knitr::kable()輸出表格結(jié)果其實不是?常美觀,并且很多功能都不能實現(xiàn)。這時我們可以?kableExtra、huxtable等擴展包來美化表格,對字體大小、對齊方式、邊框底紋、選擇高亮等等進行設(shè)置。

kableExtra包的使用,詳見:

更多包盡見:https://bookdown.org/yihui/rmarkdown-cookbook/table-other.html

3. R Markdown 的主題

R Markdowm作為制作可重復(fù)性報告的優(yōu)秀?具,除了提供?檔編輯、圖表輸出外,還有許多主題格式供我們選擇。除了默認主題外,還可以通過加載rticles、prettydoc、rmdformatstufte、cerulean等包獲取更多主題格式。下?我們看看?類擴展包?的主題樣式。

記得先安裝!

詳見視頻演示

rticles可以更好地進行PDF及其他格式導(dǎo)出,其他包更適用于HTML格式導(dǎo)出。

參考資料

  1. https://www.bilibili.com/video/BV1ib4y1X7r9
  2. https://rmarkdown.rstudio.com/lesson-1.html
  3. https://www.bookstack.cn/read/rmarkdown-cookbook-1.0-en/5d40b1b09165871a.md
  4. https://bookdown.org/yihui/rmarkdown/
  5. http://www.itdecent.cn/p/4705a1dc8e5a
  6. http://www.itdecent.cn/p/f71fac797a6c
  7. https://markdown.com.cn/cheat-sheet.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容