2012-06-26 3 views
5

Я хочу сделать одну фигуру в R с двумя графиками в файле уценки с knitr. Обычно это легко сделать с layout(t(1:2)) или par(mfrow=c(1,2)). Могу ли я сделать это с помощью knitr, или он всегда будет делать две отдельные цифры?Использование макета с knitr

Вот минимальный рабочий пример, который создает файл с именем ./junk.Rmd и ./junk.md в рабочем каталоге вместе с двумя файлами ./figure/junkislands1.png (который включает в себя только первый участок) и ./figure/junkislands2.png (который включает в себя как участки, которые я хочу).

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

Проблема заключается не столько в том, что он создает два .png файлов, а то, что файл уценка junk.md включает в себя оба.

Когда я делаю это уценку в html, он включает в себя оба файла .png, когда мне нужен только тот, который изображен на обеих фигурах.

Вот файл junk.md, который генерируется из 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

строго говоря, это ошибка в 'knitr' (https://github.com/yihui/knitr/issues/292); Я попытаюсь исправить это позже; спасибо –

+0

У меня [исправлено] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) эта ошибка в версии для разработки: https://github.com/yihui/knitr#readme. Вы можете использовать 'fig .keep = 'last'', но это больше не потребуется. –

ответ

11

Посмотрите http://yihui.name/knitr/options и, в частности fig.keep. Я думаю, что вы хотите 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

только боковое примечание - вы можете называть 'knit (text = temp)' непосредственно, вместо того, чтобы писать текст в 'junk.Rmd'. –

Смежные вопросы