【问题标题】:Sweave v. Knitr v. Rmarkdown: code chunk headersSweave v. Knitr v. Rmarkdown:代码块头
【发布时间】:2019-04-13 14:59:14
【问题描述】:

我试图了解rmarkdownsweaveknitr 之间的关系。查看代码和示例,我遇到了两种类型的代码头,我不明白它们属于什么语言/包。

标题是

```{}
```

<<>>=
@
  1. 它们之间有什么区别?
  2. 它们与rmarkdownsweaveknitr 有什么关系?
  3. 如果我在 .rnw 上工作,我使用的是哪一个?

【问题讨论】:

  • sweave 基于 LaTeX 基本格式,rmarkdown 基于降价。两者都允许用于 R 代码、输出和绘图的代码块。 knitr used to support sweave 但显然不再这样做了,因此它将 rmarkdown 呈现为多种输出格式之一(包括 LaTeX、pdf、html、markdown、docx、epub)。
  • @r2evans 很抱歉让您感到困惑,但 knitr 从第一天开始就支持 Sweave,并且仍然支持它。您提到的文档说完全兼容性已被删除,这仅意味着不再支持某些 Sweave 块选项。这种.Rnw 格式仍然得到很好的支持。
  • 除非我弄错了,否则区别是:```{}rmarkdown&lt;&lt;&gt;&gt;=sweave
  • Zweifler,我相信它更像是“普通 LaTeX”的标记,提供代码执行(简单地说),但我不是 sweave 的专家。坦率地说,我从来没有真正使用过它……在我知道sweave 之前,我已经在使用 R 和 LaTeX,然后直接跳到了rmarkdown。使用sweave 肯定有优势,即能够控制 Markdown 不支持的 LaTeX 中的内容。
  • @r2evans 您上面的理解是绝对正确的,所以请随时发布答案。如果有任何需要进一步澄清的地方,我很乐意加入。谢谢!

标签: r r-markdown knitr sweave


【解决方案1】:

sweave 和 rmarkdown 都可以为 R、python 和其他编程语言运行任意代码。每种的优缺点各不相同,但可以快速比较一下:

R 降价:

  • 典型的文件扩展名:.rmd (case-insens),也许是.rmarkdown

  • 支持 R、python 和 several other languages

  • 输出到 HTML、docx、LaTeX(以及 PDF)和several other output formats

  • 使用三重反引号来划分块

      Regular text.
    
      ```{r chunkname, chunkoptions, ...}
      a <- 1
      ```
    
      ```{python pychunk, chunkoptions, ...}
          def myfun(v: list) -> list:
          """
          Something important in this docstring.
          """
          return [a+1 for a in v]
      ```
    
      More regular text.
    
  • 因为是基于markdown的,所以对交叉引用、table-control等有一定的限制;其中有许多软件包和已知的缓解技术(这里不一一列举)。但是,您可以在 markdown 中使用直接 LaTeX 格式,因此输出到 PDF 也可以享受这种控制(尽管 LaTeX 代码不翻译为其他输出格式)。

编织:

  • 典型的文件扩展名包括.rnw(case-insens),我见过.noweb(对此不完全确定...)

  • 支持 R,如果您可以通过 R 访问其他语言(例如通过 reticulate),可能还支持其他语言

  • 输出到 LaTeX 和 PDF

  • 使用&lt;&lt;&gt;&gt;=@ 进行块划分:

      Regular text.
    
      <<chunkname, chunkoptions, ...>>=
      a <- 1
      @
    
      More regular text.
    
  • 因为它直接基于 LaTeX,所以您可以尽可能多地控制格式、交叉引用等

knitr

  • 处理sweavermarkdown 格式的文件
  • 可能需要一些摆动预处理(例如,使用Sweave2knitr),参考:https://yihui.name/knitr/demo/sweave/
  • rationale for knitr 是 “解决 Sweave 中一些长期存在的问题,并将其他附加包中的功能合并到一个包中(knitr ≈ Sweave + cacheSweave + pgfSweave + weaver + animation::saveLatex + R2HTML::RweaveHTML + highlight::HighlightWeaveLatex + 0.2 * brew + 0.1 * SweaveListingUtils + 更多)。”

【讨论】:

  • 您能补充一下 knitr 与两者的关系吗?
  • 很好的补充,@LutzPrechelt
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多