2013-08-29 9 views
6

Gdy używam knitr zbudować dokument HTML wyjście z następującego kodu:zapobiec knitr/Rmarkdown od przeplatanie wyjście kawałek z kodem

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 gdzie kod w chunk1 jest przeplatana z wyjściem sprawozdania cat . Co ciekawe, wyjście w pętli for jest wyprowadzane jako pojedynczy blok.

wolałbym mieć cały kodz chunk1 pojawiać się najpierw, a następnie wszystkie wyjściaz chunk1. Czy istnieje sposób, aby zapytać Rmarkdown/knitr, aby uniknąć bardziej szczegółowego przeplatania, który obecnie wykonuje?

+0

Niekoniecznie uzyskanie co chcesz, ale można zrobić kawałki kodu 2, które są identyczne, jeden gdzie 'eval = FALSE, a drugi gdzie' echo = FALSE. –

+0

Mogłem to zrobić. Albo mogę zawinąć zawartość porcji w 'for (x in 1)', która utrzymuje Rmarkdown z przeplatania wyjścia (kosztem niepotrzebnego kodu w moim doc). Ale wolałbym mieć opcję, aby to zrobić we właściwy sposób. Czy ktoś wie, czy to możliwe? – Harlan

+1

@Harlan Nie sądzę, że jest to łatwe ze względu na sposób, w jaki knitr przetwarza te bloki. Minimalnym hackiem byłoby wstawienie bloku wewnątrz '{}' – hadley

Odpowiedz

8

Oto rozwiązanie zaproponowałem

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} 

``` 

W najnowszej wersji knitr, @yihui dodała nową opcję klocek results = "hold", który automatycznie utrzymuje drukowanie wszystkich wyjścia do końca. W związku z tym, możemy tylko napisać

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