`bookdown`/`rmarkdown`/`knitr`:非代码顺序处理方法?

`bookdown`/`rmarkdown`/`knitr`: Non-code sequential processing howto?

我的 bookdown 项目以编程方式进行如下:

  1. 读取原始数据 - 生成各种统计数据。
  2. 数据预处理(对数化、归一化、插补)- 生成各种图表以监测发生的人口级缺陷。
  3. 用于分析 QC 的 PCA - 为 PCA 和载荷主导数据点生成图。
  4. 差异表达分析 - 生成火山图和描绘显着差异表达特征的图。
  5. 在各种生物 ontology 系统中对来自 4. 的差异表达特征的过度表达分析 - 为丰富的类别生成示例条形图。

我使用 bookdown 将分析和叙述很好地结合在一起,能够有效地即时丢弃临时(相当大的)数据集/ggplot2 对象(pre/post 转换数据等)。

然而:目标受众 mostly/only 对 4. & 5. 感兴趣,这使我想到了以下结构:

4., 5., Appendix(1., 2., 3.)

除了预计算1.-5,还有别的办法吗?然后按目标顺序重新访问 - 如果可能的话,我宁愿避免在内存中累积所有这些 ggplot2 对象。

您可以执行以下操作:

  1. 将步骤 1-3 和 4-5 分成两个单独的 *.Rmd 文件,比如 123.Rmd45.Rmd
  2. 将代码块添加到 45.md 的开头,将 123.Rmd 编织到 123.md:

```{r knit123, include = FALSE} knitr::knit("123.Rmd", output = "123.md") ```

这将在 Markdown 中生成步骤 1-3 的输出,并使由此创建的所有对象可用于步骤 4-5。

  1. 将代码块添加到 45.Rmd 的末尾,读取 123.md 打印其内容:

```{r include123, results = "asis"} cat(readLines("123.md"), sep = "\n") ```

results = "asis" 将阻止任何进一步处理,因为它已经是有效的 Markdown。

  1. 45.Rmd 编织成您想要的任何目标格式。

编辑 (1):

TL;DR:不是将步骤 1-3 中的对象在整个步骤 4-5 中存储在内存中以便之后打印它们,而是先打印它们并存储结果在磁盘上。


编辑(2):

既然你明确提到了 bookdown:如果有一个 YAML 选项在编织过程结束时包含一个 Markdown 文件,我不会感到惊讶(类似于 include-after: 123.md);但我从头到尾都不确定,而且我也懒得自己去查。 ;-)