R Markdown,Knitr,Pandoc和Bookdown之间的关系


90

R Markdown,Knitr,Pandoc和Bookdown的功能之间有什么关系?

在将带有嵌入式R代码(例如.Rnw.Rmd)的标记文档转换为最终输出(例如.pdf.html)时,这些软件包之间的“分工”具体是什么?而且,如果使用Knitr处理RMarkdown,则该rmarkdown程序包有什么作用?与包有何不同markdown package

Answers:


135

潘多克

Pandoc是一个文档转换器。它可以从许多不同的标记格式转换为多种格式,例如.doc.pdf

Pandoc是没有GUI的命令行工具。它是独立于R的独立软件。但是,它与R Studio捆绑在一起,因为rmarkdown它依赖于它进行文档转换。

Pandoc不仅可以转换文档,还可以在基本Markdown语言的基础上添加功能,使其能够支持更复杂的输出。

R Markdown

R Markdown基于markdown:

Markdown(标记语言)

Markdown是一种轻量级的标记语言,具有纯文本格式语法,旨在将其转换为HTML和许多其他格式。降价文件是纯文本文件,通常具有扩展名.md

与HTML和Latex等其他标记语言一样,它完全独立于R。

没有明确定义的Markdown标准。这导致了碎片化,因为不同的供应商编写了自己的语言变体来纠正缺陷或添加缺少的功能。

Markdown(R包)

markdown是一个R包,它将.Rmd文件转换为HTML。它是的前身rmarkdown,它提供了更多功能。不再建议使用。

R Markdown(标记语言)

R Markdown是markdown语法的扩展。R Markdown文件是纯文本文件,通常具有文件扩展名.Rmd。它们是使用markdown语法的扩展名编写的,该扩展名使R代码能够以稍后可以执行的方式嵌入其中。

因为期望它们由rmarkdown程序包处理,所以可以将Pandoc markdown语法用作R markdown文件的一部分。这是对原始markdown语法的扩展,该语法提供了其他功能,例如原始HTML / Latex和表。

R Markdown(包装)

R软件包rmarkdown是一个库,可以处理.Rmd文件并将其转换为多种不同的格式。

核心功能是rmarkdown::render站在pandoc的肩膀上。此功能使用pandoc将输入文件渲染为指定的输出格式。如果输入需要编织,则knitr::knit在pandoc之前调用。

RMarkdown软件包的目的只是提供合理的默认值和一个R友好的界面来自定义Pandoc选项。

RMarkdown文件顶部显示的YAML元数据专门用于将选项传递给rmarkdown::render,以指导构建过程。

请注意,RMarkdown仅处理markdown语法。如果要转换.Rhtml.Rnw文件,则应使用内置的便捷功能Knitr,例如knitr::knit2htmlknitr:knit2pdf

针织衫

Knitr会获取带有嵌入式代码的纯文本文档,执行代码并将结果“编织”回文档中。

例如,它将

核心功能是knitr::knit默认情况下,它将查看输入文档并尝试猜测它是什么类型-Rnw,Rmd等。

该核心功能执行三个角色:-源解析器,它查看输入文档并检测哪些部分是用户要评估的代码。-一个代码评估程序,它评估此代码-一个输出渲染器,它将评估结果以原始输出类型可以解释的格式写回到文档中。例如,如果输入文件为.Rmd,则输出渲染将以.md格式标记代码评估的输出。

在文档格式之间转换

Knitr并没有文档格式之间的转换-如转换.md.html。但是,它确实提供了一些方便的功能来帮助您使用其他库来执行此操作。 如果您使用的是rmarkdown软件包,则应忽略此功能,因为它已被取代rmarkdown::render

一个示例knitr:knit2pdf将是:'编织输入的Rnw或Rrst文档,并使用texi2pdf或rst2pdf编译为PDF'。

可能引起混乱knitr::knit2html,这是“markdown::markdownToHTML是一种便利功能,用于编织输入减价来源并调用以将结果转换为HTML。” 现在这是旧版功能,因为该markdown软件包已被该rmarkdown软件包取代。请参阅此注释

书本

bookdown包建立在R Markdown的基础上,并继承了Markdown语法的简单性以及多种输出格式(PDF / HTML / Word /…)的可能性。

它提供了多页HTML输出,编号和交叉引用图形/表格/节/等式,插入部件/附录以及导入GitBook样式(https://www.gitbook.com)的功能,以创建优雅而吸引人的HTML书页。


2
我觉得这很令人困惑,所以我在这里做了最大的努力。如果我有什么问题,请编辑或添加其他答案...
RobinL

6
我感到困惑的一个方面是传递给工具链每个步骤的参数的文档。几乎没有交互式帮助(例如自动补全),人们不得不猜测应该在yaml标头中调用什么参数,或者通过knitr_opts(我总是忘记它的名字),通过自定义pandoc参数,通过其他yam文件或自定义pandoc模板...有时会感到有些丛林,尤其是在将LaTeX添加到链中时。
baptiste's

3
@baptiste我完全同意。这正是我偏爱裸露LaTeX的RNW文档的原因。没有中间pandoc步骤,更少的魔术,更少的混乱。只是公认的陡峭LaTeX学习曲线。我认为,当您对简单的默认设置感到满意时,Rmarkdown很棒。但是,一旦您必须对其进行调整,复杂性就会迅速上升。
CL。

3
这是我找到的所有最好的解释。对于初学者,甚至像我一样在R和乳胶方面有多年经验的人,这都非常令人困惑。优秀的职位。
StatsStudent

2
@StatsStudent我认为rstudio rmarkdown备忘单的早期版本中有一个图表,非常有助于理解从rmarkdown创建输出的不同步骤。也许这里的答案可能与图表有关?
Mark Neal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.