将knitr代码块编织到不止一个文件中,而是几个文件中。

9

我是knitr的新用户。我知道knitr可以“解开”(来自文学编程社区)或将源代码块提取到R脚本文件中。作为org-mode用户,我习惯于能够为每个代码块指定特定的文件,可能是多个块相同的文件。在org-mode中“解开”或提取源代码时,不是产生一个输出代码文件,而是产生几个代码文件(这有助于大型项目的模块化)。

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


也许您可以进一步澄清问题。提供示例会有所帮助。我是一个常规的knitr用户,但我不知道您在问什么。 - Maxim.K
@Maxim.K 我认为你不知道 Holger 在问什么的原因是问题的答案是“不”。但我完全同意,这个问题应该更清晰。我认为 Holger 正在寻找一个块选项,该选项可以按块指定 purl 的输出文件(据我所知,这种选项不存在)。 - CL.
@CL 是的 - 这正是我在寻找的。我已经从手册中意识到可能没有“简单”选项,但我希望比我更了解knitr的人知道如何编写某种钩子函数来实现这一点。 - Holger Hoefling
我已经仔细研究了代码。可能可以通过扩展 hook_purl 来实现。请查看 第123行:您可以尝试将 output 替换为另一个文件名,该文件名是基于(新创建的)块选项生成的。但是,我不愿意实现并发布此答案,因为我不确定不写入 .knitEnv$tangle.file 是否会产生不良副作用。 - CL.
@CL 谢谢。这是个好主意。目前我已经在 knitr 仓库中提交了一个功能请求。我会看看 Yihui 的回复,然后再决定下一步怎么做。 - Holger Hoefling
1
请查看这里这里,这些与knitr有关的问题可能会对您有所帮助。 - alistaire
1个回答

3

你的问题至少有两个不同的阅读方式,每个方式需要稍微不同的工作流程。

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

如果您想要一些块的条件执行,并且有几个不同的条件组合可以运行,请使用R Markdown YAML头,并包括一个params元素。

----
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
```

谢谢 - 我认为你已经非常接近了。实际上,我不想将每个块分成单独的文件,我想能够为每个块指定它所在的文件(可能有几个块写入同一个文件)。你的条件执行方法很接近,但我不想执行它们,我想将它们写出来。总的来说,从我读到的所有评论和答案中,答案似乎是我想做的目前不可能实现。 - Holger Hoefling
@HolgerHoefling 是的,我正在尝试思考适合您需求并且可以使用当前knitr功能的工作流程。有时候,将您的工作流程调整到软件上可能比反过来更好。 - Richie Cotton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接