【R練工坊】為你的 R Markdown 增加標題快捷列及表格美化 - Kai-Shen Tseng (kst) - Medium


為你的Rmarkdown文件加上目錄,有助於正在寫長文件的你,做到更好的讀者服務。

為你的 R Markdown 增加標題快捷列及表格美化

接觸資料分析相關的領域後,除了從最一開始的問題定義,資料整理,建立模型與解釋模型外,還有一個很重要的最後一步,就是如何呈現你的結果。若恰好身為 R 語言的使用者,在呈現結果這部分,很推薦去瞭解號稱「簡報神器」的 R Markdown

此篇主要是針對已經有寫過 R Markdown 的使用者,透過一些簡單的補充,讓你的呈現結果更美觀。若沒有寫過的讀者,也可以從接下來的介紹以及簡單的範例,去感受 R Markdown 的威力,以及如何透過一些小設定來讓呈現效果倍增。

先簡單介紹一下 Markdown,Markdown是一個輕量的標記語言,主要用於讓人們可以不用HTML複雜繁長的語法就能夠標記格式而達到管理文件的目的。白話一點來說,舉下圖為例,左半邊是你的 Markdown 格式的文件 (xxx.md),右半邊則是在瀏覽器上顯示的效果,可以看到,透過簡單的符號,便可以達到不錯的排版效果。

附註:下圖是在 mac 上的一個 App,叫做 MacDown,在左半標編輯 Markdown 的同時,右半邊可以馬上看到效果,非常方便。

MacDown

這時候再提到 R Markdown,我相信就比較容易理解了。R Markdown 透過 R 的相關套件,將 Markdown 格式的文件,插入 R 程式碼,能夠快速將 R 分析的結果,無論是圖表或是檢定報表,產生成文件,而產生的格式可以 pdf 或是 html 等等。

以下開始簡單示範如何建立自己的第一個 R Markdown,以及如何讓他的變得更美觀。(假設你已經在你的電腦安裝 R 以及 RStudio)

所有的程式碼都會放在此連結中,提供給各位參考。

開啟 RStudio 後,新增檔案裡面有一個 R Markdown

Create a r markdown file

接著替你的 R Markdown 訂一個標題和作者名字,以及告訴 RStudio 要幫我們把 R Markdown 的檔案轉成哪一類型的輸出格式,像是這邊的選項有 HTML、PDF 以及 Word,預設會選擇 HTML。

請放心,這邊之後都可以更改。

Title and Author name

設定好標題和作者名字之後,RStudio 很貼心的幫我們建立了一個模板,若有寫過 Markdown 的人會發現,圖中的兩個井字號就是 Markdown 的語法,而淺灰色區塊的部分,就是我們可以在裡面編寫 R 程式。

這時候我們可以按下存檔鍵,替這份 r markdown 文件命名。

接著按下 Knit 或是快速鍵 Command ⌘ + Shift + k,RStudio 便會幫我們把 R Markdown 的文件轉為 HTML 的文件。

Knit

按下後,便看到我們的第一個 .rmd 轉 .html 的結果了!RStudio 會把轉成 HTML 的結果,跳出一個視窗顯示。而這份 HTML 檔,可以在同一層資料去找到這份檔案,雙擊後,便會用預設瀏覽去開啟這份 .html 檔。

若是你不喜歡在每次 knit 後一直跳出來,可以在 Knit 旁邊的小齒輪,點下後,點選 Preview in Viewer Pane,那他就會在最右下角的視窗呈現。

像是這樣,這對我來說比較不惱人。

講了這一些內容,終於開始要進入到我本來想寫這篇記錄文的原因了…

在寫過幾次 R Markdown 後,會發現到一些不方便,像是:

  • 我有一份,有大大小小的標題的報告,我知道可以利用 Markdown 語法中的 # 字號來讓標題有大小層次,但有沒有類似把各個標題顯示成大綱的呈現方式?然後一點那個標題,就可以直接跳到那一個段落?
  • 我想要呈現表格,我知道可以用 kable() 這個指令直接把 R 的 dataframe 或是 matrix 呈現在文件中,但顯示起來怎麼這麼陽春啊?而且萬一我有好幾百列,有沒有類似滾輪的方式顯示很多列的表格?

以上是我在寫了幾次 R Markdown 後,深深感受到覺得不太方便的兩個地方,所幸這些問題,都已經有對應的解決辦法,以下就開始針對這兩個部分做簡單的分享。

首先是標題的呈現,在看某些人做的 R Markdown,會發現在文件的左半邊,會有各個標題檔的連結,個人認為這個功能非常重要,特別是在大標小標一大堆的時候,會幫助使用者快速找到他想看的內容。

舉下圖為例,同樣內容的兩份文件,左半邊的頁面,因為有大標的顯示跟連結,相比右半邊的頁面而言,讓用戶更瞭解這份文件具有哪些內容,以及當用戶事後想查找某些內容時,不用整份文件滑到底,而是可以透過點左半邊大標的方式,直接進到該標題的內容區。

加入的方式非常簡單,只需要在 R Markdown 的最頂端,設定 title 以及 author 的那部分,增加一些設定即可。第一張圖是原先的設定。

在 output 的 html_document 中,多增加這幾個部分,便可以達到列出標題的效果。各個參數代表的意義,可以在此連結查詢。

一但做了上述的設定,你的 html output 就更加一目瞭然。

接著是表格的部分,由於原先的範例並沒有顯示表格的部分,因此我自行加入了顯示表格,加入的方式也非常容易,在原先的用於設定的 R 程式碼區塊中多引入一個 knitr 套件。以下用圖呈現,原先的區塊:

新增載入 knitr 套件的部分

並在最後加上這幾行程式碼。

這時候再重新 knitr 你的 R Markdown 後,便可以看到 cars 這個資料集被顯示出來。但你同樣會發現,這個方式,會把所有的資料一次顯示,當你資料集有幾百萬列的時候…

接著就必須在載入另一個套件來幫我們處理這件事情,更詳細的內容,推薦這個連結給大家,裡面有非常多美化表格或不同維度的表格呈現方式。我以下就只先簡介如何利用滾輪的方式,有效的呈現一個多列表格。

首先先載入 kableExtra這個套件,接著修改兩個地方。

第一點,在最一開始的 R 設定的區塊部分,多載入一個套件dplyr,不過此套件不是必須,有興趣可以搜尋 r pipeline operator 等關鍵字,並再加上下圖的第 19 行,確立產出後的表格格式為 html。更改後如下圖:

第二點,接著將本來產生表格的 R 程式碼,多增加 scroll_box 的設定,並記得給一個適當的高度,若沒設定的話,則會全部顯示出來,那等於沒有設定 scroll box 這個功能。

接著再重新 knit 這份 R Markdown,便可以看到本來全部顯示的表格,現在被限縮在一個固定個高度,並且表格的右邊出現了滾輪。

scroll box

透過上述的設定跟套件,本來已經很有威力的報告或文件,變得更精美,且更容易讓讀者抓到你想呈現的重點。

簡單統整一下,這篇文章主要是分享在製作 R Markdown 的報告文件時,多增加一些小技巧,像是標題呈現跟快速連結的部分,讓用戶更掌握整篇的內容,以及表格成美化跟呈現。

以上完整程式碼都在此連結