防止knitr / Rmarkdown与代码交错块输出

时间:2013-08-29 17:23:10

标签: r markdown knitr r-markdown

当我使用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避免它目前正在进行的更细粒度的交织?

1 个答案:

答案 0 :(得分:9)

这是我提出的解决方案

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添加了一个新的块选项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')
```