2013-08-29 3 views
6

Когда я использую knitr для построения HTML-документ из следующего кода:предотвратить knitr/Rmarkdown от перемежения выходного куска с кодом

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 избегать более гранулированного переплетения, которое он сейчас делает?

+0

Не совсем то, чего вы хотите, но вы могли бы сделать 2 куски кода, которые идентичны, тот, где вы 'Eval = false' и второй, где' эхо = false'. –

+0

Я мог бы это сделать. Или я могу обернуть содержимое кусков в 'for (x in 1)', что позволяет Rmarkdown чередовать вывод (за счет избыточного кода в моем документе). Но я предпочел бы иметь возможность сделать это правильно. Кто-нибудь знает, возможно ли это? – Harlan

+1

@ Харлан Я не думаю, что это легко из-за того, как knitr обрабатывает эти блоки. Минимальный взлом заключался бы в том, чтобы поместить блок внутри '{}' – hadley

ответ

8

Вот решение, которое я предложил

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') 
``` 
Смежные вопросы