Sweave 诉 Knitr 诉 Rmarkdown:代码块 headers
Sweave v. Knitr v. Rmarkdown: code chunk headers
我正在尝试了解 rmarkdown
、sweave
和 knitr
之间的关系。查看代码和示例我将 运行 分为两种类型的代码 headers 并且我不明白它们属于什么 language/package 。
headers是
```{}
```
和
<<>>=
@
- 它们有什么区别?
- 它们与
rmarkdown
、sweave
和 knitr
有何关系?
- 如果我在
.rnw
上工作,我在使用哪一个?
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,所以对于交叉引用,table-control等有一些限制;其中许多都有软件包和已知的缓解技术(太多无法在此处列出)。但是,您可以在 markdown 中使用直接的 LaTeX 格式,因此输出到 PDF 也可以享受该控制(尽管 LaTeX 代码未翻译为其他输出格式)。
挥动:
典型的文件扩展名包括 .rnw
(不区分大小写),我见过 .noweb
(对此不完全确定...)
支持 R,如果您可以通过 R 访问其他语言(例如通过 reticulate
),可能还支持其他语言
输出到 LaTeX 和 PDF
使用<<>>=
和@
进行分块:
Regular text.
<<chunkname, chunkoptions, ...>>=
a <- 1
@
More regular text.
因为它直接基于 LaTeX,所以您可以尽可能多地控制格式、交叉引用等
knitr
- 处理
sweave
和 rmarkdown
格式的文件
- 可能需要一些摆动预处理(例如,使用
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 + 更多)。"
我正在尝试了解 rmarkdown
、sweave
和 knitr
之间的关系。查看代码和示例我将 运行 分为两种类型的代码 headers 并且我不明白它们属于什么 language/package 。
headers是
```{}
```
和
<<>>=
@
- 它们有什么区别?
- 它们与
rmarkdown
、sweave
和knitr
有何关系? - 如果我在
.rnw
上工作,我在使用哪一个?
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,所以对于交叉引用,table-control等有一些限制;其中许多都有软件包和已知的缓解技术(太多无法在此处列出)。但是,您可以在 markdown 中使用直接的 LaTeX 格式,因此输出到 PDF 也可以享受该控制(尽管 LaTeX 代码未翻译为其他输出格式)。
挥动:
典型的文件扩展名包括
.rnw
(不区分大小写),我见过.noweb
(对此不完全确定...)支持 R,如果您可以通过 R 访问其他语言(例如通过
reticulate
),可能还支持其他语言输出到 LaTeX 和 PDF
使用
<<>>=
和@
进行分块:Regular text. <<chunkname, chunkoptions, ...>>= a <- 1 @ More regular text.
因为它直接基于 LaTeX,所以您可以尽可能多地控制格式、交叉引用等
knitr
- 处理
sweave
和rmarkdown
格式的文件 - 可能需要一些摆动预处理(例如,使用
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 + 更多)。"