Связь между R Markdown, Knitr, Pandoc и Bookdown


90

Какова связь между функциональностью R Markdown, Knitr, Pandoc и Bookdown?

В частности, каково «разделение труда» между этими пакетами при преобразовании документов разметки со встроенным кодом R (например, .Rnwили .Rmd) в конечные результаты (например, .pdfили .html)? И если Knitr используется для обработки RMarkdown, что делает rmarkdownпакет и чем он отличается от пакета markdown package?

Ответы:


135

Пандок

Pandoc - это конвертер документов. Он может конвертировать из ряда различных форматов разметки во многие другие форматы, такие как .docи .pdfт. Д.

Pandoc - это инструмент командной строки без графического интерфейса. Это независимая часть программного обеспечения, отдельная от R. Однако она поставляется в комплекте с R Studio, поскольку rmarkdownиспользует ее для преобразования документов.

Pandoc не только конвертирует документы, но и добавляет функциональность поверх базового языка разметки, чтобы он мог поддерживать более сложные выходные данные.

R Markdown

R Markdown основан на уценке:

Markdown (язык разметки)

Markdown - это облегченный язык разметки с синтаксисом форматирования простого текста, разработанный таким образом, чтобы его можно было преобразовать в HTML и многие другие форматы. Файл уценки - это простой текстовый файл, которому обычно присваивается расширение .md.

Как и другие языки разметки, такие как HTML и Latex, он полностью независим от R.

Четко определенного стандарта Markdown не существует. Это привело к фрагментации, поскольку разные поставщики пишут свои собственные варианты языка для исправления недостатков или добавления недостающих функций.

Markdown (пакет R)

markdownпредставляет собой пакет R, конвертирующий .Rmdфайлы в HTML. Это предшественник rmarkdown, предлагающий гораздо больше функций. Больше не рекомендуется к использованию.

R Markdown (язык разметки)

R Markdown - это расширение синтаксиса уценки. Файлы R Markdown - это простые текстовые файлы, которые обычно имеют расширение .Rmd. Они написаны с использованием расширения синтаксиса уценки, которое позволяет встраивать в них R-код таким образом, чтобы впоследствии его можно было выполнить.

Поскольку ожидается, что они будут обработаны rmarkdownпакетом, можно использовать синтаксис разметки Pandoc как часть файла разметки R. Это расширение исходного синтаксиса уценки, которое обеспечивает дополнительные функции, такие как необработанный HTML / латекс и таблицы.

R Markdown (пакет)

Пакет R rmarkdown- это библиотека, которая обрабатывает и преобразует .Rmdфайлы в различные форматы.

Основная функция - это то, rmarkdown::renderчто стоит на плечах pandoc . Эта функция отображает входной файл в указанный выходной формат с помощью pandoc. Если ввод требует вязания, то knitr::knitвызывается до pandoc.

Цель пакета RMarkdown - просто предоставить разумно хорошие настройки по умолчанию и удобный для R интерфейс для настройки параметров Pandoc. .

Метаданные YAML, отображаемые в верхней части файлов RMarkdown, специально предназначены для передачи параметров rmarkdown::render, чтобы направлять процесс сборки.

Обратите внимание, что RMarkdown работает только с синтаксисом уценки. Если вы хотите преобразовать файл .Rhtmlили .Rnwфайл, вам следует использовать встроенные вспомогательные функции Knitr, такие как knitr::knit2htmlиknitr:knit2pdf

Knitr

Knitr берет обычный текстовый документ со встроенным кодом, выполняет код и «вяжет» результаты обратно в документ.

Например, он конвертирует

Основная функция - knitr::knitи по умолчанию она просматривает входной документ и пытается угадать его тип - Rnw, Rmd и т. Д.

Эта основная функция выполняет три роли: - Анализатор исходного кода, который просматривает входной документ и определяет, какие части являются кодом, который пользователь хочет оценить. - Оценщик кода, который оценивает этот код. - Средство визуализации вывода, которое записывает результаты оценки обратно в документ в формате, который интерпретируется исходным типом вывода. Например, если входным файлом является файл .Rmd, выходной рендер помечает выходные данные оценки кода в .mdформате.

Преобразование между форматами документов

Knitr вовсе не конвертировать между форматами документов - таких , как преобразование .mdв .html. Однако он предоставляет некоторые удобные функции, которые помогут вам использовать для этого другие библиотеки. Если вы используете rmarkdownпакет, вы должны игнорировать эту функцию, потому что она была заменена rmarkdown::render.

Пример knitr:knit2pdf: «Свяжите входной документ Rnw или Rrst и скомпилируйте в PDF с помощью texi2pdf или rst2pdf».

Потенциальный источник путаницы заключается в том knitr::knit2html, что «удобная функция связывает входной источник уценки и вызывает markdown::markdownToHTMLпреобразование результата в HTML». Теперь это унаследованная функция, поскольку markdownпакет был заменен rmarkdownпакетом. См. Эту заметку .

Bookdown

Пакет bookdown построен на основе R Markdown и наследует простоту синтаксиса Markdown, а также возможность использования нескольких типов выходных форматов (PDF / HTML / Word /…).

Он предлагает такие функции, как вывод многостраничного HTML, нумерацию и перекрестные ссылки на рисунки / таблицы / разделы / уравнения, вставку частей / приложений и импортирование стиля GitBook ( https://www.gitbook.com ) для создания элегантного и привлекательного HTML. книжные страницы.


2
Я нашел это очень запутанным, поэтому я постарался здесь как можно лучше. Пожалуйста, отредактируйте или добавьте другой ответ, если у меня что-то не так ...
RobinL

6
один аспект, который меня сбивает с толку, - это документация параметров, передаваемых на каждом этапе цепочки инструментов. Практически нет интерактивной помощи (например, автозаполнения), и нужно угадывать, какие параметры следует вызывать в заголовках yaml или через knitr_opts(я всегда забываю, как это называется), или через настраиваемые аргументы pandoc, или через дополнительные файлы yam, или через настраиваемый pandoc template ... Иногда это немного похоже на джунгли, особенно когда вы добавляете LaTeX в цепочку.
baptiste

3
@baptiste Полностью согласен. И именно по этой причине я предпочитаю документы RNW с голым LaTeX. Никаких промежуточных pandocшагов, меньше магии, меньше путаницы. Просто по общему признанию крутая кривая обучения LaTeX. На мой взгляд, Rmarkdown отлично подходит, когда вас устраивают простые вещи по умолчанию. Но как только вам придется его настроить, сложность быстро возрастет.
кл.

3
Это лучшее объяснение, которое я нашел всему этому. Это очень сбивает с толку новичков или даже тех, кто имеет многолетний опыт работы с R и латексом отдельно, как я. Отличный пост.
StatsStudent

2
@StatsStudent Я думаю, что в предыдущей версии шпаргалки rstudio rmarkdown была диаграмма, которая была очень полезна для понимания различных этапов создания вывода из rmarkdown. Может быть, ответ здесь можно сделать с помощью диаграммы?
Марк Нил,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.