B.1 knitr

knitr 包是基于“文学化编程 (Literate Programming)”(Knuth 1984)的思想设计的,它允许你在源文档中将程序代码与文本混合在一起。当 knitr 编译文档时,程序代码(以代码块为单位)会被提取并执行,程序输出将与原始文本一起展示在输出文档中。我们在第 2.3 节中介绍了基本的语法。

R Markdown 不是 knitr 支持的唯一源格式。knitr 的基本思想可应用于其他计算和创作语言。例如,knitr还支持 R 和 LaTeX 的组合(*.rnw文档),以及 R + HTML (*.RtML) 等。你也可以在 knitr 中 使用其他计算语言,如 C++、Python、SQL 等。下面是一个简单的例子,你可以在 http://rmarkdown.rstudio.com/authoring_knitr_engines.html 中了解更多信息。

```{python}
x = 'Hello, Python World!'
print(x.split(' '))
```

Python 用户可能熟悉 IPython 或 Jupyter Notebooks (https://jupyter.org)。事实上,R Markdown 也可以作为笔记本使用,并有一些额外的优势;有关这方面详细信息,请参阅这篇博客文章:https://blog.rstudio.org/2016/10/05/r-notebooks/

如果要在文档中显示文本形式的代码块,可以在块头部之前添加一个内联表达式,该表达式生成一个空字符串 (`r ''`),并将代码块用在四个反引号包裹起来,14例如:

````
`r ''````{r}
# a literal code chunk
```
````

当文档被编译后,内联表达式将会消失,你会看到:

```{r}
# a literal code chunk
```

编译文档时通常不需要直接调用 knitr 函数,因为 rmarkdown 会调用 knitr。如果你希望编译源文档而不进一步将其转换为其他格式,可以使用 knitr::knit() 函数。

参考文献

Knuth, Donald E. 1984. “Literate Programming.” The Computer Journal 27 (2): 97–111.

  1. 如果要在列表等其他环境中显示文字形式的代码块,请遵循缩进规则:https://pandoc.org/MANUAL.html#block-content-in-list-items↩︎