【问题标题】:Executing external source in knitr and printing the external code chunk在 knitr 中执行外部源并打印外部代码块
【发布时间】:2016-08-07 20:57:51
【问题描述】:

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

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

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

```{r runanalysis, warning=FALSE, message=FALSE}
# run the analysis code to generate the objects

source('../src/rf-model-caret.R') 
```

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

```{r analysis,  eval=TRUE, echo=FALSE}
knitr::read_chunk('../src/rf-model-caret.R')
```

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

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

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

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

【问题讨论】:

    标签: r knitr


    【解决方案1】:

    你可以试试这个:

    在正文中:

    ```{r runanalysis, code=readLines('../src/rf-model-caret.R'), echo=FALSE, eval=TRUE}
    ```
    

    在附录中:

    ```{r runanalysis, code=readLines('../src/rf-model-caret.R'), echo=TRUE, eval=FALSE}
    ```
    

    【讨论】:

    • 好的,谢谢@Yihui。这将生成在主文档中执行并显示在附录中的代码。有没有办法让第二行只读取一个 knitr 块而不是整个文件?
    • 您可以通过正常的子集方法选择要包含的行,即[](例如readLines()[3:6]
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多