Mối quan hệ giữa R Markdown, Knitr, Pandoc và Bookdown


90

Mối quan hệ giữa chức năng của R Markdown, Knitr, Pandoc và Bookdown là gì?

Cụ thể 'sự phân công lao động' giữa các gói này trong việc chuyển đổi các tài liệu đánh dấu có mã R nhúng (ví dụ .Rnwhoặc .Rmd) thành kết quả đầu ra cuối cùng (ví dụ .pdfhoặc .html) là gì? Và nếu Knitr được sử dụng để xử lý RMarkdown, thì rmarkdowngói này làm gì và nó khác với gói như thế nào markdown package?

Câu trả lời:


136

Pandoc

Pandoc là một công cụ chuyển đổi tài liệu. Nó có thể chuyển đổi từ một số định dạng đánh dấu khác nhau sang nhiều định dạng khác, chẳng hạn như .doc, .pdfv.v.

Pandoc là một công cụ dòng lệnh không có GUI. Nó là một phần mềm độc lập, tách biệt với R. Tuy nhiên, nó đi kèm với R Studio vì rmarkdowndựa vào nó để chuyển đổi tài liệu.

Pandoc không chỉ chuyển đổi tài liệu, mà còn bổ sung thêm chức năng trên ngôn ngữ đánh dấu cơ sở để cho phép nó hỗ trợ các đầu ra phức tạp hơn.

R Markdown

R Markdown dựa trên markdown:

Markdown (ngôn ngữ đánh dấu)

Markdown là một ngôn ngữ đánh dấu nhẹ với cú pháp định dạng văn bản thuần túy được thiết kế để có thể chuyển đổi sang HTML và nhiều định dạng khác. Tệp đánh dấu là tệp văn bản thuần thường có phần mở rộng .md.

Giống như các ngôn ngữ đánh dấu khác như HTML và Latex, nó hoàn toàn độc lập với R.

Không có tiêu chuẩn Markdown được xác định rõ ràng. Điều này đã dẫn đến sự phân mảnh khi các nhà cung cấp khác nhau viết các biến thể ngôn ngữ của riêng họ để sửa các lỗi hoặc thêm các tính năng còn thiếu.

Markdown (gói R)

markdownlà một gói R chuyển đổi .Rmdcác tệp thành HTML. Nó là người tiền nhiệm của rmarkdown, cung cấp nhiều chức năng hơn. Nó không còn được khuyến khích sử dụng.

R Markdown (ngôn ngữ đánh dấu)

R Markdown là một phần mở rộng của cú pháp đánh dấu. R Tệp đánh dấu là tệp văn bản thuần túy thường có phần mở rộng tệp .Rmd. Chúng được viết bằng cách sử dụng một phần mở rộng của cú pháp đánh dấu cho phép nhúng mã R vào chúng theo cách mà sau này có thể được thực thi.

Vì chúng dự kiến ​​sẽ được rmarkdowngói xử lý , nên có thể sử dụng cú pháp đánh dấu Pandoc như một phần của tệp đánh dấu R. Đây là một phần mở rộng cho cú pháp đánh dấu ban đầu cung cấp chức năng bổ sung như HTML thô / Latex và các bảng.

R Markdown (gói)

Gói R rmarkdownlà một thư viện xử lý và chuyển đổi .Rmdcác tệp thành một số định dạng khác nhau.

Các chức năng cốt lõi là rmarkdown::renderđứng trên vai của pandoc . Hàm này 'kết xuất tệp đầu vào thành định dạng đầu ra được chỉ định bằng cách sử dụng pandoc. Nếu đầu vào yêu cầu đan thì knitr::knitđược gọi trước pandoc.

Mục đích của gói RMarkdown chỉ đơn giản là cung cấp giá trị mặc định hợp lý và giao diện thân thiện với R để tùy chỉnh các tùy chọn Pandoc. .

Siêu dữ liệu YAML được nhìn thấy ở đầu các tệp RMarkdown cụ thể là để chuyển các tùy chọn đến rmarkdown::render, hướng dẫn quy trình xây dựng.

Lưu ý rằng RMarkdown chỉ xử lý cú pháp đánh dấu. Nếu bạn muốn chuyển đổi một .Rhtmlhoặc một .Rnwtệp, bạn nên sử dụng các chức năng tiện lợi được tích hợp sẵn Knitr, chẳng hạn như knitr::knit2htmlknitr:knit2pdf

Knitr

Knitr lấy một tài liệu văn bản thuần túy với mã nhúng, thực thi mã và 'đan' kết quả trở lại tài liệu.

Ví dụ, nó chuyển đổi

Chức năng cốt lõi là knitr::knitvà theo mặc định, chức năng này sẽ xem xét tài liệu đầu vào và thử đoán xem nó là loại gì - Rnw, Rmd, v.v.

Chức năng cốt lõi này thực hiện ba vai trò: - Bộ phân tích cú pháp nguồn, xem xét tài liệu đầu vào và phát hiện phần nào là mã mà người dùng muốn được đánh giá. - Trình đánh giá mã, đánh giá mã này - Trình kết xuất đầu ra, ghi kết quả đánh giá trở lại tài liệu ở định dạng có thể hiểu được theo kiểu đầu ra thô. Ví dụ, nếu tệp đầu vào là một .Rmd, kết xuất đầu ra sẽ đánh dấu kết quả đánh giá mã theo .mdđịnh dạng.

Chuyển đổi giữa các định dạng tài liệu

Knitr không chuyển đổi giữa các định dạng tài liệu - chẳng hạn như chuyển đổi a .mdthành a .html. Tuy nhiên, nó cung cấp một số chức năng tiện lợi để giúp bạn sử dụng các thư viện khác để thực hiện việc này. Nếu bạn đang sử dụng rmarkdowngói, bạn nên bỏ qua chức năng này vì nó đã được cấp trên rmarkdown::render.

Một ví dụ là knitr:knit2pdfsẽ: 'Đan tài liệu Rnw hoặc Rrst đầu vào và biên dịch sang PDF bằng texi2pdf hoặc rst2pdf'.

Một nguồn gây nhầm lẫn tiềm ẩn là knitr::knit2html, "là một hàm tiện lợi để đan nguồn đánh dấu đầu vào và gọi markdown::markdownToHTMLchuyển đổi kết quả sang HTML." Đây bây giờ là chức năng kế thừa vì markdowngói đã được thay thế bởi rmarkdowngói. Xem ghi chú này .

Đặt trước

Gói bookdown được xây dựng trên R Markdown và kế thừa sự đơn giản của cú pháp Markdown, cũng như khả năng có nhiều loại định dạng đầu ra (PDF / HTML / Word /…).

Nó cung cấp các tính năng như đầu ra HTML nhiều trang, đánh số và tham chiếu chéo các số liệu / bảng / phần / phương trình, chèn các phần / phụ lục và nhập kiểu GitBook ( https://www.gitbook.com ) để tạo HTML thanh lịch và hấp dẫn các trang sách.


2
Tôi thấy điều này rất khó hiểu vì vậy tôi đã cố gắng hết sức ở đây. Vui lòng chỉnh sửa hoặc thêm một câu trả lời khác nếu tôi có điều gì đó sai ...
RobinL 12/11/16

6
một khía cạnh mà tôi thấy khó hiểu là tài liệu về các tham số được chuyển cho mỗi bước của chuỗi công cụ. Hầu như không có trợ giúp tương tác (chẳng hạn như tự động hoàn thành) và người ta phải đoán tham số nào nên được gọi trong tiêu đề yaml, hoặc thông qua knitr_opts(tôi luôn quên nó được gọi là gì), hoặc thông qua đối số pandoc tùy chỉnh, hoặc thông qua tệp yam bổ sung hoặc tùy chỉnh pandoc template ... Đôi khi có cảm giác hơi hoang dã, đặc biệt là khi bạn thêm LaTeX vào chuỗi.
baptiste

3
@baptiste Tôi hoàn toàn đồng ý. Và đây chính xác là lý do tại sao tôi thích các tài liệu RNW với LaTeX trần. Không có pandocbước trung gian , ít ma thuật hơn, ít nhầm lẫn hơn. Chỉ là đường cong học tập LaTeX dốc được thừa nhận. Theo tôi, Rmarkdown là tuyệt vời khi bạn hài lòng với những thứ đơn giản mặc định. Nhưng ngay khi bạn phải tinh chỉnh nó, độ phức tạp sẽ tăng lên nhanh chóng.
CL.

3
Đây là lời giải thích tốt nhất mà tôi đã tìm thấy về tất cả những điều này. Nó rất khó hiểu đối với người mới bắt đầu hoặc thậm chí những người có nhiều năm kinh nghiệm về R và latex riêng như tôi. Bài xuất sắc.
StatsStudent

2
@StatsStudent Tôi nghĩ rằng phiên bản trước của bảng gian lận rstudio rmarkdown có một sơ đồ khá hữu ích để hiểu các bước khác nhau trong việc tạo đầu ra từ rmarkdown. Có lẽ một câu trả lời ở đây có thể làm với một sơ đồ?
Mark Neal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.