1 Giới thiệu qua về Rmarkdown

Rmarkdown là một framework giúp các data science có thể public các kết quả của mình dưới dạng một báo cáo. Rmarkdown hỗ trợ việc:

  • Save và thực thi code ngay trên file
  • Tạo ra một báo cáo tích hợp với phần code và phần kết quả và có thể share với cộng đồng mạng

Rmarkdown có khả năng tái tạo và bổ sung báo cáo. Nó hỗ trợ hàng chục các format output khác nhau như pdf, powerpoint, html,…. Cụ thể hơn về các format này bạn xem video giới thiệu:

https://player.vimeo.com/video/178485416

Để cài đặt Rmarkdown dùng lệnh install.packages(“rmarkdown”).

Một Rmarkdown sẽ gồm 2 phần cơ bản:

  • Header: Là nội dung nằm giữa 2 dấu “- - -” qui định các thông tin về tiêu đề, tác giả, ngày xuất bản, định dạng của output. Ví dụ:
--- 
title: "RmarkDownFormat" 
author: "Pham Dinh Khanh" 
date: "April 18, 2018" 
output: html_document 
---
  • Body: Làn phần nằm dưới của header gồm các chunkcode và nội dung
  1. Các chunkcode là nơi cho phép chúng ta embed các kết quả sau xử lý code và đồ thi. Các chunk code được đặt trong thẻ:
'''{r} 
'''

bên trong {r} là các setup của chunkcode đó.

  1. Nội dung text là các phần nội dung thông thường dạng text.

2 Suppress các warning và message cho chunk code Rmarkdown

Khi load các package trên Rmarkdown ta thường gặp các message về các package liên quan được load hoặc warning package này được build ở RStudio version mới hơn. Những thông tin này là không cần thiết. Vì vậy cần ẩn các phần này đi. Chẳng hạn như:

  • Lúc ban đầu:
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
  • Nếu muốn suppress toàn bộ các warning và message của hàm thì dùng lệnh:
'''{r setup, include=FALSE}
opts_chunk$set(warning = FALSE, message = FALSE)
'''
library(dplyr)

Lệnh này chỉ cần dùng 1 lần ở R chunk code đầu tiên sẽ khiến toàn bộ các wanring và message của file RmarkDown bị suppress cho các R chunk code kế tiếp.

3 Các lựa chọn của output:

Qui định về output của một file Rmarkdown nằm ở phần header mục output. Để tùy chỉnh output ta cần thêm các thông số cho output đó. Các thông số này có dạng phân cấp từ trên xuống dưới theo quan hệ parent:children và được các nhau bởi dấu “:”

output: 
  html_document:
    code_folding: show

Dạng phổ biến của chúng là là html_document nên tôi sẽ trình bày về các tùy chọn của nó:

3.1 Các định dạng hiển thị:

  • code_folding: Thêm chức năng folding code (hide/show/none).
  • code_download: Thêm chức năng download file Rmarkdown cho người xem (true/false)
  • number_sections: Thêm chức năng tự động đánh số các mục header theo cây header 1,2,3,4,… (yes/no).
  • toc: Có hiển thị bảng menu hay không (true/false)
  • toc_depth: Level tối đa để được hiển thị trên menu.
  • toc_float: Nội dung của table sẽ luôn hiển thị bên trái và khi scroll down document thì nó vẫn nổi lên bên trái.
  • theme: Lựa chọn theme cho rmarkdown, “default” là mặc định, các theme khác gồm: “cerulean”, “journal”, “flatly”, “readable”, “spacelab”, “united”, “cosmo”, “lumen”, “paper”, “sandstone”, “simplex”, and “yeti”
  • highlight: Xác định kiểu highlight các code. Kiểu hỗ trợ bao gồm: “default”, “tango”, “pygments”, “kate”, “monochrome”, “espresso”, “zenburn”, “haddock”, and “textmate”. Pass null to prevent syntax highlighting.
  • smart: Qui định kiểu typo đối với các kí tự đặc biệt chẳng hạn như “- - -” sẽ hiển thị là dấu gạch dài “—”, dấu “- -” sẽ hiển thị là dấu gạch ngắn “-” khi được để mặc định là true, trường hợp false sẽ giữ nguyên thể ban đầu.
  • css: Thêm style của riêng bạn vào Rmarkdown mà không sử dụng style của package. File css phải để trên cùng một folder với Rmarkdown.
  • MathJax: Chèn kiểu gõ latext trong rmarkdown. Phía sau MathJax là link CDN tới máy chủ chứa MathJax:
--- 
title: "RmarkdownFormat" 
output: 
  html_document: 
    mathjax: "http://example.com/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML" 
---

Chẳng hạn sau khi thêm MathJax tôi gõ được công thức latex như sau:

\[ P(Y_{i}|X_{i};\theta) = p_{i}^{Y_{i}}(1-p_{i})^{1-Y_{i}}\]

  • keep_md: Sau mỗi lần chạy file Rmarkdown sẽ sinh ra một file .md sau đó biến đổi thành html. Nếu chúng ta muốn giữ file này thì lựa chọn TRUE.

3.2 Điều chỉnh header và body của Rmarkdown

Trong một số trường hợp muốn overwrite lên header của Rmarkdown ta có thể setup trong includes như bên dưới:

---
title: "RmarkdownFormat"
output:
  html_document:
    includes:
      in_header: header.html
      before_body: doc_prefix.html
      after_body: doc_suffix.html
---

Khi đó các file header.html, doc_prefix.html và doc_suffix.html phải được đặt trong cùng một thư mục.
Hoặc chúng ta có thể sử dụng một cách khác để định dạng 1 lần cho toàn bộ các file Rmarkdown trong thư mục của chúng ta thông qua file _output.yaml được tạo ra trong cùng 1 thư mục:

---
html_document:
  self_contained: false
  theme: united
  highlight: textmate
---

Tất cả các file trong cùng 1 thư mục sẽ kế thừa các định dạng từ file này và override các định dạng đã thiết lập trước đó.

3.3 Điều chỉnh lại hình dạng

  • fig_width và fig_height: Sử dụng để điều chỉnh tỷ lệ rộngxdài của html hiển thị (mặc định là 5*7).
  • fig_retina: Điều chỉnh độ phân giải. Mặc định là 2.
  • fig_caption: hình dạng được render có bao gồm caption hay không?

Chẳng hạn như:

---
title: "Habits"
output:
  html_document:
    fig_width: 7
    fig_height: 6
    fig_caption: true
---

3.4 Điều chỉnh hiển thị bảng

  • df_print: được set up là “paged” thì bảng có khả năng phân trang như bên dưới:
---
title: "Iris"
output:
  html_document:
    df_print: paged
---
iris

Có thể điều chỉnh số dòng và cột hiển thị khi truyền thêm vào chunkcode các lựa chọn cols.print=5, rows.print=5:

'''{r cols.print=5, rows.print=5}
mtcars
'''

Ngoài ra còn có các options khác cho hiển hị bảng như:
- “default”: Hiển thị bảng dưới dạng print.data.frame
- “kable”: Hiển thị bảng dưới dạng knitr::kable
- “tibble”: Hiển thị bảng dưới dạng tibble::print.tbl_df

4 Mark order list và thay đổi format text trong Rmarkdown

4.1 Tạo list ordered

Sử dụng kí hiệu số như bên dưới để tạo list theo thứ tự

1. Item1
2. Item2
3. Item3

4.2 Tạo list unordered

* Item1
* Item2
* Item3

4.3 Nested order

1. Item1
  - SubItem level1
    - SubItem level2

4.6 Bôi đậm chữ

**My name is Khanh**

My name is Khanh

4.7 In nghiêng chữ

*My name is Khanh*

My name is Khanh

4.8 Quote text

Nếu muốn nổi bật một vài dòng ta có thể thêm dấu > text.

Tên tôi là Phạm Đình Khánh
> Best regards!
> Phạm Đình Khánh ,QTRRTT - Techcombank.

Tên tôi là Phạm Đình Khánh > Best regards! > Phạm Đình Khánh ,QTRRTT - Techcombank.

4.9 Quote code

Nếu muốn quote lại một phần text code trong Rmarkdown ta để chúng trong dấu ‘’’. Khi đó đoạn text code sẽ được đóng khung và format đẹp hơn.

'''
library(dplyr)
mtcars %>% group_by(carb) %>% 
  summarise_all(sum)
'''

Tuy nhiên nội dung code sẽ không được thực thi.