【问题标题】:prevent knitr/Rmarkdown from interleaving chunk output with code防止 knitr/Rmarkdown 将块输出与代码交错
【发布时间】:2013-08-29 17:23:10
【问题描述】:

当我使用 knitr 从以下代码构建 HTML 文档时:

Chunk Output
========================================================

Outside a chunk.

```{r chunk1, results='asis'}

cat('Inside a chunk\n\n')

for (i in 1:3) {
    cat('* Inside loop #', i, '\n')
}

cat('Outside a loop, but still inside the first chunk')
```

Between chunks.

```{r chunk2, results='asis'}

cat('Inside second chunk')

```

I get output 其中chunk1 中的代码与cat 语句的输出交错。有趣的是,for 循环内的输出是作为单个块输出的。

我希望首先出现来自chunk1 的所有代码,然后是来自chunk1 的所有输出。有没有办法让 Rmarkdown/knitr 避免它目前正在做的更细粒度的交织?

【问题讨论】:

  • 没有得到你想要的,但你可以制作 2 个相同的代码块,一个是 eval = FALSE,第二个是 echo = FALSE
  • @Harlan 我认为这并不容易,因为 knitr 处理这些块的方式。一个最小的技巧是将块放入{}
  • 这里是another solution,您可以使用results = 'hide' 抑制输出并使用echo = F, results = "asis" 添加一个依赖块。您可以为名为@9​​87654334@ 的选项提交功能请求,就像fig.show = "hold" 一样,它会自动执行此操作以获得结果,因为似乎有一些用例。
  • 听到功能请求,并完成代码。
  • 这是最好的客户服务@Yihui!

标签: r markdown knitr r-markdown


【解决方案1】:

这是我提出的解决方案

Chunk Output
========================================================

Outside a chunk.

```{r chunk1, results='hide'}

cat('Inside a chunk\n\n')

for (i in 1:3) {
    cat('* Inside loop #', i, '\n')
}

cat('Outside a loop, but still inside the first chunk')
```

```{r ref.label = 'chunk1', results = 'asis', echo = F}

```

在最新版本的 knitr 中,@yihui 增加了一个新的 chunk 选项results = "hold",它会自动将所有输出的打印保存到最后。因此,我们可以写

Chunk Output
========================================================

Outside a chunk.

```{r chunk1, results='hold'}

cat('Inside a chunk\n\n')

for (i in 1:3) {
    cat('* Inside loop #', i, '\n')
}

cat('Outside a loop, but still inside the first chunk')
```

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 2016-08-19
    • 1970-01-01
    • 2018-12-10
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2017-12-08
    相关资源
    最近更新 更多