【问题标题】:Tangle knitr code blocks into not one but several files将 knitr 代码块缠绕成多个文件而不是一个文件
【发布时间】:2016-08-05 07:45:32
【问题描述】:

我是 knitr 的新用户。我知道 knitr 可以“解决”(取自 Literate programming community)或将源代码块提取到 R 脚本文件中。作为 org-mode-user,我习惯于为每个代码块指定一个特定的文件,不同的块可能使用相同的文件。在 org 模式下“纠结”或提取源代码时,会生成多个代码文件,而不是一个输出代码文件(这有助于大型项目的模块化)。

我想知道在 knitr 中是否有类似的可能?我可以在knitr中逐块指定输出文件吗?

【问题讨论】:

  • 也许您可以进一步澄清这个问题。提供示例会有所帮助。我是一个普通的 knitr 用户,但我不知道你在问什么。
  • @Maxim.K 我认为你不知道霍尔格在问什么的原因是问题的答案是“不”。但我完全同意,问题(c/sh)会更清楚。我认为 Holger 正在寻找一个块选项,它在每个块的基础上为 purl 指定输出文件(不存在,AFAIK)。
  • @CL 是的——这正是我想要的。我已经从手册中意识到可能没有一个“简单”的选项,但我希望有比我更多的 knitr 知识的人知道如何编写可以做到这一点的某种钩子函数。
  • 我一直在研究代码。可能hook_purl 可以这样扩展。查看line 123:您可以尝试将output 替换为基于(新创建的)块选项生成的另一个文件名。但是,我不愿意实现这一点并将其作为答案发布,因为我不确定不写信给.knitEnv$tangle.file 是否会产生令人讨厌的副作用。
  • herehere

标签: r knitr


【解决方案1】:

您的问题至少有两种不同的解读方式,每一种都需要稍有不同的工作流程。

如果每个块都将写入一个单独的输出文档,那么为了帮助模块化,您应该将报告部分拆分为多个文档。由于knitr 支持child documents,因此您始终可以按照您喜欢的任何组合将它们重新组合成更大的文档。

如果您想要有条件地执行某些块,并且可以运行几种不同的条件组合,请使用 R Markdown YAML 标头,并包含 params element.

----
params:
  report_type: "weekly" # should be "weekly" or "yearly"
----

您可以通过设置evalinclude 块选项来设置运行哪些块。

```{r, some_chunk, eval = params$report_type == "weekly", include = params$report_type == "weekly"}
# chunk contents
```

【讨论】:

  • 谢谢 - 我想你已经很接近了。我实际上不希望每个块分成单独的文件,我希望能够为每个块指定它所在的文件(可能有几个到同一个文件中)。你的条件执行接近了,除了我不想执行它们,我想把它们写出来。总的来说,从我读过的所有cmets和答案来看,答案似乎是我想做的事情目前是不可能的。
  • @HolgerHoefling 是的,我正在尝试考虑适合您的需求并且可以使用 knitr 的当前功能的工作流程。有时,最好根据软件调整工作流程,而不是反过来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多