Khóa học
Bài viết này sẽ khám phá một gói dữ liệu khoa học thiết yếu và hữu ích mà mọi người dùng R cần biết—R Markdown. Chúng ta sẽ tìm hiểu R Markdown là gì, những lợi ích mà nó mang lại, dùng để làm gì, cách cài đặt, khả năng làm việc với mã, phần tường thuật và biểu đồ dữ liệu, cú pháp sử dụng, các định dạng đầu ra của tài liệu R Markdown, cũng như cách kết xuất tài liệu và chia sẻ với cộng tác viên.
Vì R Markdown đặc biệt phù hợp với môi trường phát triển tích hợp (IDE) RStudio, chúng ta sẽ sử dụng IDE này xuyên suốt bài viết. Hướng dẫn RStudio cung cấp chỉ dẫn cần thiết để cài đặt và bắt đầu sử dụng RStudio.
Cùng bắt đầu nhé!
R Markdown là gì?
R Markdown là một gói R miễn phí và mã nguồn mở cung cấp không gian làm việc để tạo các dự án khoa học dữ liệu. Ưu điểm chính của R Markdown là cho phép bạn kết hợp mã, văn bản và trực quan hóa dữ liệu trong một tài liệu chỉn chu, có thể chia sẻ, tái lập đầy đủ và có thể kết xuất ra nhiều định dạng đầu ra đa dạng, cả tĩnh lẫn tương tác.
Một số định dạng đầu ra phổ biến gồm HTML, PDF, Microsoft Word, bài thuyết trình, ứng dụng, website, bảng điều khiển, báo cáo, mẫu, bài viết, sách, v.v.
Ngoài ra, R Markdown cho phép theo dõi kiểm soát phiên bản dễ dàng và hỗ trợ nhiều ngôn ngữ lập trình ngoài R, bao gồm Python và SQL.
Nếu bạn muốn đào sâu cách biên soạn báo cáo động với R Markdown, khóa học Reporting with R Markdown là điểm khởi đầu phù hợp.
Cài đặt R Markdown
Khi dùng R Markdown ngoài RStudio, ta cài đặt tương tự như bất kỳ gói R nào khác từ kho CRAN (Comprehensive R Archive Network):
install.packages("rmarkdown")
Sau khi cài đặt, cần nạp gói vào môi trường làm việc R:
library(rmarkdown)
Ngược lại, khi làm việc với R Markdown trong RStudio—cũng là cách chúng ta áp dụng trong suốt hướng dẫn này—ta không cần cài và nạp gói rmarkdown một cách tường minh. Bằng cách nhấp File—New File—R Markdown trên thanh menu của RStudio, một tài liệu R Markdown mới sẽ được mở. Lúc này, bạn có thể nhận thông báo Install Required Packages như sau:

Sau khi xác nhận cài đặt các gói cần thiết, trong cửa sổ bật lên mới, chúng ta cung cấp tiêu đề tài liệu và tên tác giả (đều tùy chọn nhưng được khuyến nghị), giữ nguyên các thiết lập khác và nhấn OK:

Tài liệu R Markdown mặc định
Ở phần trước, chúng ta đã mở một tài liệu R Markdown mới trong RStudio. Nó trông như sau:

Bạn sẽ thấy tài liệu bao gồm tiêu đề, tên tác giả, ngày hiện tại và định dạng đầu ra mặc định mà ta đã chọn trong cửa sổ bật lên khi mở. Sau đó là một số ví dụ về cú pháp cơ bản dùng trong R Markdown, như thêm và định dạng khối mã, thêm tiêu đề, chèn liên kết, nhấn mạnh văn bản và tạo biểu đồ.
Chúng ta sẽ xem chi tiết hơn các chức năng khác nhau của R Markdown và cú pháp tương ứng. Trước mắt, hãy lưu tệp mặc định này rồi kết xuất nó sang định dạng đầu ra đã chọn (trong ví dụ này—HTML) để xem thành phẩm trông ra sao.
Để lưu tệp, nhấp File—Save As... trên thanh menu của RStudio.
LƯU Ý: tên tài liệu R Markdown mà ta đã nhập trước đó không giống tên tệp. Cần lưu tệp vào thư mục dự án và nhớ lưu lại thường xuyên trong quá trình làm việc (File—Save).
Để kết xuất tệp đã lưu sang định dạng đầu ra đã chọn (HTML), hãy nhấn Knit trên thanh công cụ của tệp:

Dưới đây là cách tài liệu R Markdown mặc định hiển thị ở định dạng HTML:

Định dạng văn bản trong R Markdown
Trong nhiều trường hợp, văn bản chiếm phần lớn một dự án khoa học dữ liệu. Vì vậy, điều quan trọng là biết cách định dạng văn bản trong R Markdown để dễ đọc, hiệu quả và cuốn hút.
Nếu bạn muốn học cách dùng R cho phân tích dữ liệu và khoa học dữ liệu, đồng thời nâng cao kỹ năng lập trình R và khoa học dữ liệu, hãy cân nhắc các lộ trình nghề nghiệp thân thiện với người mới bắt đầu và toàn diện sau:
Tiêu đề
Ta có thể thêm nhiều cấp độ tiêu đề vào tài liệu R Markdown bằng ký hiệu thăng (#). Cú pháp như sau:
# Tiêu đề 1 (tiêu đề chính)
## Tiêu đề 2 (mục)
### Tiêu đề 3 (tiểu mục)
v.v.
Khi kết xuất, các tiêu đề trên sẽ hiển thị như sau:

Nhấn mạnh văn bản
R Markdown cho phép thêm các kiểu nhấn mạnh khác nhau cho văn bản, như in nghiêng, in đậm, gạch ngang, chỉ số trên hoặc chỉ số dưới, như sau:
- *in nghiêng* hoặc _in nghiêng_
- **in đậm** hoặc __in đậm__
- ~~gạch ngang~~
- chữ^chỉ số trên^
- chữ~chỉ số dưới~
Bên dưới là cách các kiểu nhấn mạnh này hiển thị sau khi kết xuất:

Danh sách
Để tạo danh sách không thứ tự, dùng một trong ba cú pháp sau:
* Mục 1* Mục 2* Mục 3
hoặc:
- Mục 1- Mục 2- Mục 3
hoặc:
+ Mục 1+ Mục 2+ Mục 3
Trong cả ba trường hợp, kết quả hiển thị là như nhau:

Để tạo danh sách có thứ tự, dùng cú pháp sau:
1. Mục 12. Mục 23. Mục 3
Kết quả hiển thị gần như tương tự, với thụt lề trước mỗi số.
Lưu ý rằng nếu ta xóa một mục khỏi danh sách có thứ tự, thêm mục mới, hoặc chỉ đơn giản gõ sai một số (ví dụ viết 20. thay vì 2. như trên), các số sẽ được tự động hiệu chỉnh và hiển thị đúng như mong muốn:

Trích dẫn khối
Đối với trích dẫn khối, dùng ký hiệu > trước ký tự đầu tiên của đoạn cần trích:
> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam hendrerit nisi sed sollicitudin pellentesque. Nunc posuere purus rhoncus pulvinar aliquam. Ut aliquet tristique nisl vitae volutpat. Nulla aliquet porttitor venenatis. Donec a dui et dui fringilla consectetur id nec massa. Aliquam erat volutpat. Sed ut dui ut lacus dictum fermentum vel tincidunt neque.
Kết quả sẽ hiển thị như sau:

Ta thêm một dòng trống sau khối trích dẫn để thoát khỏi nó.n danh sách không thứ tự gồm 3 mục
Liên kết
Nếu muốn chèn một liên kết theo đường dẫn trực tiếp, đặt đường dẫn giữa hai ký hiệu < và >. Ví dụ, cấu trúc sau:
sẽ được hiển thị thành:
Còn nếu muốn gắn liên kết vào một từ hoặc một đoạn chữ ngắn, dùng cú pháp sau (vẫn lấy trang Google làm ví dụ):
[Google](https://www.google.com/)
Điều này sẽ hiển thị thành:
Hình ảnh
Để chèn hình ảnh vào phần tường thuật, ta dùng một trong các cách sau:
- Nếu muốn thêm ảnh từ Internet:

- Nếu tệp ảnh được lưu trong thư mục dự án nơi tài liệu R Markdown được lưu:

- Nếu tệp ảnh lưu trên máy nhưng ngoài thư mục dự án:

Văn bản thay thế (Alt text) cung cấp mô tả ngắn gọn về nội dung hình, và hữu ích khi người dùng vì lý do nào đó không thể xem ảnh trên trang.
Hãy xem cách đầu tiên với một ảnh trên Pixabay, có URL ảnh là https://cdn.pixabay.com/photo/2018/12/02/10/07/web-3850917_1280.jpg:

Khi kết xuất tài liệu, ảnh sẽ hiển thị:

Ngắt dòng/đoạn
Có nhiều loại ngắt trong R Markdown:
- Ngắt dòng—để bắt đầu dòng mới. Thực hiện bằng cách kết thúc dòng trước bằng một dấu gạch chéo ngược (\).
- Ngắt đoạn—để bắt đầu đoạn mới. Thực hiện bằng cách kết thúc đoạn trước bằng hai khoảng trắng.
- Ngắt trang chiếu—để bắt đầu trang chiếu mới trong các định dạng dựa trên slide (thuyết trình) hoặc mục mới trong các định dạng khác. Thực hiện bằng cách chèn một đường kẻ ngang (***) vào tài liệu.
- Ngắt trang—để bắt đầu trang mới, áp dụng với các định dạng hỗ trợ, ví dụ Microsoft Word. Thực hiện bằng cách chèn lệnh \newpage vào tài liệu.
Hãy áp dụng ba loại ngắt đầu tiên. Dưới đây là một đoạn văn bản Lorem ipsum với một số ký hiệu ngắt trong R Markdown được chèn vào:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.\Nam hendrerit nisi sed sollicitudin pellentesque.
Nunc posuere purus rhoncus pulvinar aliquam.
***
Ut aliquet tristique nisl vitae volutpat.
Đây là cách nó hiển thị trong tài liệu HTML:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.Nam hendrerit nisi sed sollicitudin pellentesque.
Nunc posuere purus rhoncus pulvinar aliquam.
Ut aliquet tristique nisl vitae volutpat.
Định dạng và thực thi mã trong R Markdown
Mã là một thành phần thiết yếu khác của mọi dự án khoa học dữ liệu. Trong R Markdown, ta có thể chạy mã (không chỉ ngôn ngữ R), hiển thị cả mã lẫn đầu ra, chỉ hiển thị mã và ẩn đầu ra, chỉ hiển thị đầu ra và ẩn mã nguồn, v.v.
Lộ trình nghề nghiệp thân thiện với người mới R Programmer và lộ trình kỹ năng R Programming là nguồn hữu ích để học, thực hành và mài giũa kỹ năng mã R.
Khối mã (Code chunk)
Để định dạng và chạy một khối mã R trong R Markdown, bao mã trong một cặp ba dấu backtick, với ba backtick đầu theo sau bởi r trong ngoặc nhọn. Ví dụ:
```{r}
print("Hello, World!")
```
Nếu kết xuất tài liệu mà không chạy mã, khối mã sẽ trông như dưới đây:

Ngôn ngữ mã
Khi làm việc với R Markdown, chúng ta không bị giới hạn ở R vì gói này cũng hỗ trợ nhiều ngôn ngữ lập trình khác. Để chạy một đoạn mã bằng ngôn ngữ khác, hãy cung cấp tên ngôn ngữ đó thay cho R trong ngoặc nhọn. Ngoài ra, có thể cần cài và nạp một số gói bổ sung trong môi trường R đang làm việc.
Ví dụ, để dùng Python trong R Markdown, cần cài và nạp gói reticulate cho phép giao tiếp hai chiều (như tạo và truy cập biến) giữa Python và R trong cùng một tài liệu R Markdown.
Hãy viết lại đoạn mã ở phần trước bằng Python (sau khi cài và nạp gói reticulate):
```{python}
print("Hello, World!")
```

Thực thi khối mã
Để thực thi một khối mã hoặc các dòng được chọn trong R Markdown trên RStudio, nhấp nút Run trên thanh công cụ của tài liệu và chọn tùy chọn cần thiết từ danh sách thả xuống:

Trong hình trên, ta thấy mỗi tùy chọn chạy đều có phím tắt tương ứng để dùng thay vì mở danh sách thả xuống mỗi lần.
Đặt tên khối mã
Dù không bắt buộc, việc đặt tên cho các khối mã là một thực hành tốt. Nó hữu ích trong nhiều trường hợp: tham chiếu khối mã trong tài liệu, gỡ lỗi, chuyển nhanh giữa các khối, v.v. Đặt tên càng quan trọng khi làm việc với tài liệu dài có nhiều khối mã.
Thêm tên khối mã trong ngoặc nhọn, ngay sau tên ngôn ngữ, và ngăn cách bằng khoảng trắng. Tên khối mã không được chứa khoảng trắng.
Trong ví dụ dưới đây, chúng ta thêm tên hello_world cho khối:
```{r hello_world}
print("Hello, World!")
```
Tùy chọn khối mã
Các tùy chọn khối mã cho phép kiểm soát việc đánh giá mã, đầu ra, trang trí, bộ nhớ đệm, hoạt ảnh (nếu áp dụng) và biểu đồ (nếu áp dụng)—tất cả theo từng khối mã riêng lẻ. Ta có thể thêm nhiều tùy chọn vào cùng một khối. Về cú pháp, đặt các tùy chọn trong ngoặc nhọn ngay sau tên khối (nếu có; nếu không thì sau tên ngôn ngữ), ngăn cách bằng dấu phẩy.
Có nhiều tùy chọn khối trong R Markdown. Mỗi tùy chọn có giá trị mặc định, nhưng khi đã dùng, thường ta muốn giá trị khác mặc định. Hãy xem một số tùy chọn phổ biến và các giá trị có thể hữu ích:
echo=FALSE—mã sẽ không được hiển thị trong tài liệu cuối, chỉ có đầu ra.eval=FALSE—mã trong khối sẽ không được chạy.include=FALSE—khối mã sẽ được chạy nhưng không được đưa vào tài liệu cuối.results—giá trị mặc định là "markup"; các giá trị khác gồm:- "hide"—đầu ra của mã sẽ bị ẩn trong tài liệu cuối
- "hold"—đầu ra sẽ hiển thị trễ, chỉ sau khi cả khối mã chạy xong
- "asis"—đầu ra sẽ được chuyển qua mà không định dạng lại.
message=FALSE—không hiển thị thông báo do mã sinh ra.error=FALSE—không hiển thị lỗi do mã sinh ra.warning=FALSE—không hiển thị cảnh báo do mã sinh ra.highlight=FALSE—mã sẽ không được tô sáng trong tài liệu cuối.prompt=TRUE—ký hiệu > sẽ được thêm vào đầu mỗi dòng mã hiển thị trong tài liệu cuối.
Dưới đây là một số ví dụ về các khối mã được chạy trong R Markdown trên RStudio và sau đó kết xuất trong tài liệu cuối:
Mã trong R Markdown:

Đầu ra trong tài liệu cuối:

Mã nội dòng (Inline code)
Với mã nội dòng, ta có thể chèn trực tiếp các đoạn mã ngắn vào văn bản của tài liệu R Markdown—chúng sẽ được thực thi và đầu ra được nhúng vào văn bản. Cú pháp của mã nội dòng là r <code>.
Dưới đây là ví dụ đơn giản về văn bản chứa mã nội dòng:
There are `r 1+6` colors of the rainbow.
và cách nó hiển thị trong tài liệu cuối:
There are 7 colors of the rainbow.
Trong thực tế, mã nội dòng được dùng để tổng hợp thông tin về dữ liệu và giúp tránh sai sót có thể xảy ra nếu chèn số liệu thủ công hoặc khi dữ liệu thay đổi.
Vẽ biểu đồ trong R Markdown
Vẽ trong R Markdown là chạy mã để tạo biểu đồ. Do đó, mọi thứ đã bàn về định dạng và thực thi mã trong R Markdown, ngoại trừ mã nội dòng, đều áp dụng cho việc vẽ. Khác biệt chính là đầu ra của mã sẽ là đồ họa thay vì chỉ văn bản và số.
Lộ trình kỹ năng Data Visualization with R sẽ giúp bạn phát triển kỹ năng phân tích và trực quan hóa dữ liệu trong R, từ đó kể các câu chuyện dựa trên dữ liệu tốt hơn.
Để tùy biến biểu đồ trong R Markdown, cũng như trong R thông thường, ta dùng các công cụ của những gói trực quan hóa dữ liệu R, cũng như hàm plot() của base R.
Tuy nhiên, để kiểm soát hành vi vẽ trong tài liệu R Markdown, ta có thể dùng các tùy chọn khối chỉ liên quan đến vẽ. Phần lớn các tùy chọn này khá chuyên biệt và nằm ngoài phạm vi bài hướng dẫn "bắt đầu" này. Vì vậy, hãy xem một số tùy chọn cơ bản có thể hữu ích khi vẽ trong R Markdown:
fig.show—giá trị mặc định là "asis"; các giá trị khác gồm:- "hide"—biểu đồ sẽ được tạo nhưng không đưa vào tài liệu cuối
- "hold"—biểu đồ sẽ hiển thị trễ, chỉ sau khi cả khối mã chạy xong
- "animate"—tất cả biểu đồ của khối sẽ được gộp thành một hoạt ảnh.
fig.width—chiều rộng biểu đồ tính bằng inch, mặc định là 7.fig.height—chiều cao biểu đồ tính bằng inch, mặc định là 7.fig.align—cách căn lề biểu đồ trong tài liệu cuối, có thể là "left", "center" hoặc "right".fig.cap—chú thích hình dưới dạng chuỗi ký tự.fig.path—đường dẫn tới thư mục lưu các tệp biểu đồ do khối mã tạo ra.fig.ext—phần mở rộng của các tệp biểu đồ do khối mã tạo ra.
Dưới đây là một số ví dụ dùng các khối mã dành cho vẽ trong R Markdown, gồm mã nguồn và kết quả sau khi kết xuất:
Mã trong R Markdown:

Đầu ra trong tài liệu cuối:

Định dạng đầu ra
Đến giờ, chúng ta mới chỉ xét tài liệu HTML (html_document) làm định dạng đầu ra cho tài liệu cuối. Tuy nhiên, R Markdown cung cấp nhiều định dạng đầu ra khác, bao gồm Microsoft Word, Microsoft PowerPoint, PDF, sổ tay R tương tác, bảng điều khiển, v.v.
Ví dụ, các định dạng đầu ra sẵn có trong R Markdown để tạo tài liệu gồm html_document, pdf_document, word_document, github_document, html_notebook, html_vignette, v.v. Còn để tạo bài thuyết trình, có thể dùng: powerpoint_presentation, ioslides_presentation, slidy_presentation và beamer_presentation.
Để đặt định dạng đầu ra cho tài liệu R Markdown, gán giá trị tương ứng cho thiết lập output trong phần đầu tài liệu (còn gọi là tiêu đề YAML, viết tắt của yet another markup language). Ví dụ, với tài liệu R Markdown đang làm việc, định dạng đầu ra được đặt là html_document, cũng là định dạng mặc định trong R Markdown:

Để thay đổi, hãy thay html_document bằng định dạng cần dùng (pdf_document, word_document, powerpoint_presentation, v.v.). Bây giờ, khi nhấn Knit trên thanh công cụ, tài liệu sẽ được kết xuất theo định dạng đã chọn.
Xuất bản tài liệu R Markdown
Để xuất bản một tài liệu R Markdown, nhấp File—Publish trên thanh menu của RStudio và chọn nơi muốn xuất bản:

Sau đó làm theo hướng dẫn tiếp theo tùy vào lựa chọn trước đó và nhấn Publish. Bây giờ, tài liệu đã sẵn sàng để chia sẻ với cộng sự.
Kết luận
Tổng kết lại, trong bài viết này, chúng ta đã học cách bắt đầu với R Markdown. Trước hết, xác định R Markdown là gì và dùng để làm gì. Tiếp đến là cách cài đặt R Markdown, cách định dạng văn bản và các thành phần của nó, cách định dạng và chạy mã, cách tạo biểu đồ, các định dạng đầu ra mà R Markdown hỗ trợ, cách kết xuất tài liệu làm việc sang một trong các định dạng đó, và cách xuất bản tài liệu cuối để chia sẻ với đồng nghiệp.
Để thực hành trực tiếp với R Markdown, hãy xem khóa học Reporting with R Markdown, giúp bạn khám phá insight từ dữ liệu và biên soạn phát hiện của mình dưới dạng PDF, tệp HTML hoặc ứng dụng Shiny.