Sweave、Knitr和Rmarkdown:代码块头部

14
我正在尝试理解、和之间的关系。通过查看代码和示例,我遇到了两种类型的代码标题,但我不知道它们属于哪种语言/包。

这些标题是:

```{}
```

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

1
@r2evans 对于让您感到困惑的问题,我很抱歉,但是 knitr 从一开始就支持 Sweave,并且现在仍然支持它。您提到的文档说完全兼容性已经被删除,这只意味着某些 Sweave 块选项不再受支持。.Rnw 格式仍然得到良好的支持。 - Yihui Xie
@YihuiXie,非常抱歉,我只是快速浏览了一下评论,没有完全阅读它(这次)。感谢您纠正我的错误。 - r2evans
2
除非我弄错了,区别在于:\``{}用于rmarkdown,而 <<>>=用于sweave`。 - r2evans
2
Zweifler,我认为它更像是一种对“正常 LaTeX”进行标记的东西,提供了代码执行功能(简单来说),不过我在sweave方面并不是专家。说实话,我从来没有真正使用过它……在我知道sweave之前,我就已经在使用R和LaTeX,然后直接跳入了rmarkdown。使用sweave肯定有优点,尤其是能够控制LaTeX中不支持Markdown的内容。 - r2evans
1
@r2evans,您上面的理解完全正确,所以请随意发表答案。如果有任何需要进一步澄清的事情,我很乐意参与讨论。谢谢! - Yihui Xie
显示剩余4条评论
1个回答

19

无论是Sweave还是R Markdown,都提供了运行R、Python和其他编程语言的任意代码的能力。它们各自的优缺点各不相同,以下是一个快速比较:

R Markdown :

  • 典型的文件扩展名: .rmd(不区分大小写),也可能是.rmarkdown

  • 支持R,Python和其他几种语言

  • 输出为HTML、docx、LaTeX(因此可以生成PDF),以及其他几种输出格式

  • 使用三个反引号用于代码块划分

  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,因此在交叉引用、表格控制等方面存在一些限制;有许多软件包和已知的缓解技术可以解决这些问题(太多了,无法在此列出)。然而,您可以在markdown中使用直接的LaTeX格式,因此输出到PDF时也可以享受到这种控制(尽管LaTeX代码不会翻译成其他输出格式)。

  • Sweave:

    • 典型的文件扩展名包括.rnw(不区分大小写),我见过.noweb (不确定是否完全正确...)

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

    • 输出到LaTeX,因此可以生成PDF

    • 使用<<>>=@来标记代码块:

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

  • knitr

    • 可以处理sweavermarkdown格式的文件
    • 一些需要进行 sweave 预处理的情况可能需要(例如使用 Sweave2knitr),参考:https://yihui.name/knitr/demo/sweave/
    • knitr 的理由是“解决 Sweave 中存在已久的一些问题,并将其他插件包中的特性合并到一个包中(knitr ≈ Sweave + cacheSweave + pgfSweave + weaver + animation::saveLatex + R2HTML::RweaveHTML + highlight::HighlightWeaveLatex + 0.2 * brew + 0.1 * SweaveListingUtils + more)。”

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接