2013-08-29 5 views
6

Wenn ich knitr verwenden, um ein HTML-Dokument aus dem folgenden Code zu bauen:verhindert knitr/Rmarkdown von Verschachtelung mit Code Chunk Ausgangs

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, wo der Code in chunk1 mit dem Ausgang der cat Aussagen verschachtelt ist . Interessanterweise wird die Ausgabe innerhalb der for Schleife als ein einzelner Block ausgegeben.

Ich würde es vorziehen, alle der Code haben von chunk1 von allen der Ausgang von chunk1 zuerst, gefolgt zu erscheinen. Gibt es eine Möglichkeit, Rmarkdown/knitr zu bitten, die granulare Verflechtung zu vermeiden, die es gerade macht?

+0

Nicht ganz das bekommen, was Sie wollen, aber Sie könnten 2-Code Brocken machen, die identisch sind, ein, wo Sie 'eval = false' und die zweite in dem Sie' Echo = false'. –

+0

könnte ich das tun. Oder ich kann den Inhalt der Chunks in 'for (x in 1)' einschließen, was Rmarkdown davon abhält, die Ausgabe zu verschachteln (auf Kosten von überflüssigem Code in meinem Dokument). Aber ich hätte lieber eine Option, um das richtig zu machen. Wer weiß, ob es möglich ist? – Harlan

+1

@Harlan Ich denke nicht, dass dies einfach ist, weil knitr diese Blöcke verarbeitet. Ein minimaler Hack wäre, den Block in '{}' – hadley

Antwort

8

Hier ist die Lösung I

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} 

``` 

In der neuesten Version von knitr vorgeschlagen, @yihui hat eine neue Chunk Option results = "hold", hinzugefügt, die das Drucken aller Ausgaben bis zum Ende automatisch hält. Dementsprechend können wir nur schreiben

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