2012-06-26 13 views
5

Ich möchte eine einzige Figur in R mit zwei Plots in einer Markdown-Datei mit knitr machen. Normalerweise ist dies mit oder par(mfrow=c(1,2)) einfach zu tun. Kann ich das mit knitr machen, oder wird es immer zwei getrennte Zahlen geben?Verwenden von Layout mit Knitr

Hier ist ein Mindestarbeitsbeispiel, das eine Datei ./junk.Rmd und ./junk.md in Ihrem Arbeitsverzeichnis zusammen mit zwei Dateien ./figure/junkislands1.png (die nur die erste Handlung enthalten) genannt erzeugt und ./figure/junkislands2.png (die beiden Grundstücke enthält, die ich will).

require(knitr) 
temp <- "```{r junkislands, fig.width=8, fig.height=5} 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
```" 
cat(temp, file="junk.Rmd") 
knit("junk.Rmd", "junk.md") 

Das Problem ist nicht so sehr, dass es zwei PNG-Dateien erzeugt, sondern vielmehr, dass die Abschlags-Datei junk.md enthält beide.

Wenn ich diese Markdown in HTML mache, enthält es beide. Png-Dateien, wenn ich nur die mit beiden Zahlen geplottet haben will.

Hier ist die Datei, die von junk.md knitr generiert:

```r 
par(mfrow = c(1, 2)) 
pie(islands) 
``` 

![plot of chunk junkislands](figure/junkislands1.png) 

```r 
barplot(islands) 
``` 

![plot of chunk junkislands](figure/junkislands2.png) 
+0

streng genommen gibt, ist dies ein Fehler von 'knitr' (https://github.com/yihui/knitr/issues/292); Ich werde versuchen, es später zu beheben; danke –

+0

Ich habe [behoben] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) diesen Fehler in der Entwicklungsversion: https://github.com/yihui/knitr#readme Sie können sicherlich 'fig verwenden .keep = 'last'', aber das wird nicht mehr benötigt. –

Antwort

11

Werfen Sie einen Blick auf http://yihui.name/knitr/options und speziell fig.keep. Ich glaube, Sie wollen fig.keep = 'last'

require(knitr) 
temp <- "```{r junkislands, fig.width=8, fig.height=5, fig.keep = 'last'} 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
```" 
cat(temp, file="junk.Rmd") 
knit("junk.Rmd", "junk.md") 

```r 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
``` 

![plot of chunk junkislands](figure/junkislands.png) 
+1

nur eine Randnotiz - Sie können 'stricken (text = temp)' direkt nennen, anstatt den Text auf 'junk.Rmd' zu schreiben. –

Verwandte Themen