Sweave诉Knitr诉Rmarkdown:代码块头

时间:2018-11-10 04:07:42

标签: r r-markdown knitr sweave

我正在尝试了解rmarkdownsweaveknitr之间的关系。通过查看代码和示例,我遇到了两种类型的代码头,但我不明白它们属于哪种语言/程序包。

标题是

```{}
```

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

1 个答案:

答案 0 :(得分:2)

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

R降价:

  • 典型的文件扩展名:.rmd(区分大小写),也许是.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的,所以对交叉引用,表控件等有一些限制;有许多软件包和已知的缓解技术(其中太多,此处无法列出)。但是,您可以在markdown中使用直接LaTeX格式,因此输出到PDF也可以使用该控件(尽管LaTeX代码未转换为其他输出格式)。

调整:

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

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

  • 输出到LaTeX,因此是PDF

  • 使用<<>>=@进行块划分:

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

knitr