2012-06-26 16 views
5

Chcę utworzyć pojedynczą cyfrę w R z dwoma działkami w pliku oceny z knitr. Zwykle jest to łatwe do zrobienia z layout(t(1:2)) lub par(mfrow=c(1,2)). Czy mogę to zrobić z knitr, czy też zawsze będzie tworzył dwie osobne liczby?Korzystanie z układu z dzianinami

Oto przykład minimum pracy, który tworzy plik o nazwie ./junk.Rmd i ./junk.md w katalogu roboczym wraz z dwoma plikami ./figure/junkislands1.png (która obejmuje tylko pierwszy zapis) i ./figure/junkislands2.png (która obejmuje zarówno działek, które chcę).

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") 

Problemem jest nie tyle to, że tworzy dwa pliki .png, ale raczej, że plik Przecena junk.md obejmuje oba z nich.

Kiedy dokonuję tego obniżenia do html, zawiera on oba pliki .png, gdy chcę tylko ten z dwoma wykresami.

Oto plik junk.md który jest generowany z knitr:

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

ściśle mówiąc, jest to bug z 'knitr' (https://github.com/yihui/knitr/issues/292); Spróbuję to naprawić później; dzięki –

+0

Mam [naprawiono] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) ten błąd w wersji rozwojowej: https://github.com/yihui/knitr#readme Z pewnością można użyć 'rys. .keep = 'last'', ale nie będzie to już wymagane. –

Odpowiedz

11

Wystarczy popatrzeć na http://yihui.name/knitr/options a szczególnie fig.keep. Myślę, że chcesz 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") 

daje

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

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

tylko notatkę boczną - możesz wywołać 'knit (text = temp)' bezpośrednio zamiast wpisywać tekst do 'junk.Rmd'. –