关于r:在knitr中执行外部源并打印外部代码块 | 珊瑚贝

Executing external source in knitr and printing the external code chunk


我使用 ProjectTemplate 和 Knitr 来生成报告。大部分分析存储在 src 目录中,而报告包含演示 R markdown。

我希望正文仅包含分析结果,文档附录包含分析中的一些代码块。我发现实现这一目标的唯一方法如下:

首先在文档主体中运行实际分析:

1
2
3
4
5
“`{r runanalysis, warning=FALSE, message=FALSE}
# run the analysis code to generate the objects

source(‘../src/rf-model-caret.R’)
“`

其次,在附录中,需要两个 knitr 块。第一个读取实际代码(并执行它)。第二个显示代码。

1
2
3
4
5
6
“`{r analysis,  eval=TRUE, echo=FALSE}
knitr::read_chunk(‘../src/rf-model-caret.R’)
“`

“`{r analysis2, ref.label=”analysis”, eval=FALSE, echo=TRUE}
“`

这可行,但似乎效率很低,因为:

  • 分析必须运行两次——第一次是在主文档的源代码中,再一次是在附录中以生成代码。
  • 读取 knitr 块,然后立即再次引用它以显示代码

有没有更好的方法来实现在主文档中执行外部源代码并在附录中打印代码的目标?


你可以试试这个:

主体部分:

1
2
“`{r runanalysis, code=readLines(‘../src/rf-model-caret.R’), echo=FALSE, eval=TRUE}
“`

在附录中:

1
2
“`{r runanalysis, code=readLines(‘../src/rf-model-caret.R’), echo=TRUE, eval=FALSE}
“`
  • 是的,谢谢@Yihui。这将生成在主文档中执行并显示在附录中的代码。有没有办法让第二行只读取一个 knitr 块而不是整个文件?
  • 您可以通过正常的子集方法选择要包含的行,即 [](例如 readLines()[3:6])


来源:https://www.codenong.com/38818492/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?