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

Rob*_*inL 72 r pandoc knitr r-markdown bookdown

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

具体来说,在将标记文档与嵌入式R代码(例如.Rnw或者.Rmd)转换为最终输出(例如.pdf.html)时,这些包之间的"分工"是什么?如果Knitr用于处理RMarkdown,那么这个rmarkdown包做了什么以及它与它有何不同markdown package

Rob*_*inL 101

Pandoc

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

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

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

R Markdown

R Markdown基于降价:

Markdown(标记语言)

Markdown是一种轻量级标记语言,设计了纯文本格式语法,因此可以将其转换为HTML和许多其他格式.markdown文件是纯文本文件,通常给出扩展名.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采用带有嵌入代码的纯文本文档,执行代码并将结果"编织"回文档.

例如,它转换

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

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

在文档格式之间转换

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

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

混乱的潜在来源是knitr::knit2html,这"是一个方便的功能编织输入降价源并调用markdown::markdownToHTML将结果转换为HTML". 这是现在的遗留功能,因为markdown包已被包取代rmarkdown.请参阅此说明.

Bookdown

bookdown软件包基于R Markdown构建,继承了Markdown语法的简单性,以及多种输出格式(PDF/HTML/Word/...)的可能性.

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

  • 我发现令人困惑的一个方面是传递给工具链每个步骤的参数的文档.几乎没有交互式帮助(例如自动完成),并且必须猜测应该在yaml标头中调用哪些参数,或者通过`knitr_opts`(我总是忘记它的名称),或通过自定义pandoc参数,或通过其他yam文件,或者自定义的pandoc模板......有时候会感觉有点像丛林,特别是当你把LaTeX添加到链中时. (5认同)
  • @baptiste我完全同意.这正是我更喜欢裸露LaTeX的RNW文档的原因.没有中间的"pandoc"步骤,更少的魔力,更少的混乱.只是公认的陡峭的LaTeX学习曲线.在我看来,当您对简单的默认内容感到满意时,Rmarkdown非常棒.但是一旦你不得不调整它,复杂性就会迅速增加. (3认同)
  • 这是我发现的所有这些的最佳解释.这对于初学者甚至那些像我一样分别拥有R和乳胶经验的人来说非常困惑.优秀的帖子. (3认同)
  • 我发现这很令人困惑,所以我已经尽力了。如果我有什么问题,请编辑或添加不同的答案... (2认同)
  • @StatsStudent 我认为 rstudio rmarkdown 备忘单的早期版本有一个图表,对于理解从 rmarkdown 创建输出的不同步骤非常有帮助。也许这里的答案可以用图表来解决? (2认同)