`bookdown` /`rmarkdown` /`knitr`:非代码顺序处理如何?

时间:2018-07-17 17:22:22

标签: r r-markdown knitr bookdown

按照程序,我的bookdown项目按如下方式进行:

  1. 读取原始数据-产生各种统计信息。
  2. 数据预处理(对数,归一化,插补)-生成各种图以监视发生的总体级缺陷。
  3. 用于分析质量控制的PCA-绘制PCA和以载荷为主的数据点的图。
  4. 差异表达分析-生成火山图和表征显着差异表达特征的图。
  5. 在各种生物本体系统中对4.的差异表达特征的过度表示分析-生成了丰富类别的示例条形图。

我使用bookdown进行了很好的分析和叙述,可以高效地快速丢弃临时(相当大的)数据集/ ggplot2对象(转换前/转换后的数据等)。

但是:目标受众主要/仅对4.和5.感兴趣,这使我想到了以下结构:

  

4。,5.,附录(1.,2.,3.)

除了预先计算1.-5之外,还有其他方法吗?然后按目标顺序重新访问-我希望尽可能避免在内存中累积所有这些ggplot2对象。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  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 :与其在整个步骤4-5中将步骤1-3的对象存储在内存中,以便随后进行打印,请先打印它们并将结果存储在磁盘上。


编辑(2):

由于您明确提到了书本,所以:如果在编织过程结束时有一个YAML选项包括Markdown文件,我将不会感到惊讶(类似include-after: 123.md);但我不确定从头顶就知道,而且我懒得自己抬头。 ;-)