Sweave v. Knitr v. Rmarkdown:代码块头

Zwe*_*ler 8 r sweave knitr r-markdown

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

标题是

```{}
```
Run Code Online (Sandbox Code Playgroud)

<<>>=
@
Run Code Online (Sandbox Code Playgroud)
  1. 它们之间有什么区别?
  2. 他们与什么有关rmarkdownsweave以及knitr? 有什么?
  3. 如果我在一个.rnw,我使用的是哪个?

r2e*_*ans 13

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

R降价:

  • 典型的文件扩展名:.rmd(case-insens),也许.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.
    
    Run Code Online (Sandbox Code Playgroud)
  • 因为是基于markdown的,所以在交叉引用、table-control等方面有一定的限制;其中许多都有软件包和已知的缓解技术(太多了,无法在此列出)。但是,您可以在 Markdown 中直接使用 LaTeX 格式,因此输出到 PDF 也可以享受这种控制(尽管 LaTeX 代码不会转换为其他输出格式)。

编织:

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

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

  • 输出到 LaTeX 和 PDF

  • 使用<<>>=@为大块划分:

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

knitr

  • 处理sweavermarkdown格式的文件
  • 可能需要一些编织预处理(例如,使用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 + 更多)。”