防止knitr/Rmarkdown将代码与输出混合显示

11

当我使用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')

```

我得到输出结果,其中的chunk1代码与cat语句的输出交错显示。有趣的是,在for循环内的输出会作为单个块输出。

我希望所有来自chunk1代码都先出现,然后是所有chunk1输出。是否有一种方法可以要求Rmarkdown/knitr避免目前正在进行的更细粒度的交错呈现?


1
@Harlan 我认为这并不容易,因为knitr处理这些块的方式。一个最小的hack是将块放在{}中。 - hadley
@Hadley,那个方法可行,但显然不是最理想的。如果你把它写成答案,我会称之为解决方案。 :) - Harlan
2
这里有另一种解决方案,您可以使用results = 'hide'来抑制输出,并添加一个依赖块,其中echo = F, results = "asis"。您可以提交一个功能请求,要求添加一个名为results = "hold"的选项,就像fig.show = "hold"一样,它会自动为结果执行此操作,因为似乎有一些用例需要这样做。 - Ramnath
4
收到功能请求,代码已完成。 - Yihui Xie
1
这是客户服务的最佳体现,@Yihui! - Ramnath
显示剩余3条评论
1个回答

14

这是我提出的解决方案

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

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