防止knitr/Rmarkdown与代码交错块输出
当我使用knitr用以下代码构建HTML文档时:防止knitr/Rmarkdown与代码交错块输出,r,markdown,knitr,r-markdown,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, b
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避免它目前正在进行的更细粒度的交织 以下是我提出的解决方案
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')
```
没有完全得到你想要的,但你可以制作两个相同的代码块,一个是你
eval=FALSE
,另一个是你echo=FALSE
@Harlan我认为这并不容易,因为knitr处理这些代码块的方式。一个最简单的方法是将块放在{}
中,在这里,您可以使用results='hide'
来抑制输出,并使用echo=F,results=“asis”
添加一个依赖块。您可能会提交一个名为results=“hold”
的选项的功能请求,就像fig.show=“hold”
一样,它会自动为结果执行此操作,因为似乎有一些用于此的用例。听到功能请求,代码就完成了。这是最好的客户服务@Yihui!