【问题标题】:`bookdown`/`rmarkdown`/`knitr`: Non-code sequential processing howto?`bookdown`/`rmarkdown`/`knitr`:非代码顺序处理howto?
【发布时间】:2018-07-17 17:22:21
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: r r-markdown knitr bookdown


【解决方案1】:

您可以执行以下操作:

  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 中存储在内存中以便之后打印它们,而是先打印它们并将结果存储在磁盘上。 p>


编辑(2):

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

【讨论】:

  • 非常感谢!我现在已经成功地将这个解决方案包含在我的项目中!
  • @balin:很高兴听到 - 很乐意提供帮助。如果不再是问题,请不要忘记关闭您的 github 问题。 ;-)
猜你喜欢
  • 2018-12-10
  • 2016-10-11
  • 2015-03-18
  • 2019-04-13
  • 1970-01-01
  • 2015-09-02
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多