2012-06-26 39 views
5

Tôi muốn tạo một hình duy nhất trong R với hai ô trong một tệp đánh dấu bằng knitr. Thông thường, việc này dễ thực hiện với layout(t(1:2)) hoặc par(mfrow=c(1,2)). Tôi có thể làm điều này với knitr, hoặc nó sẽ luôn luôn làm cho hai con số riêng biệt?Sử dụng bố trí với knitr

Dưới đây là một ví dụ làm việc tối thiểu mà tạo ra một tập tin gọi là ./junk.Rmd./junk.md trong thư mục làm việc của bạn cùng với hai tập tin ./figure/junkislands1.png (mà chỉ bao gồm các lô đầu tiên) và ./figure/junkislands2.png (trong đó bao gồm cả âm mưu mà tôi muốn).

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

Sự cố không quá nhiều khi tạo tệp .png, nhưng thay vào đó, tệp đánh dấu junk.md bao gồm cả hai tệp.

Khi tôi đánh dấu đó thành html, nó bao gồm cả tệp .png khi tôi chỉ muốn một tệp có cả số liệu được vẽ.

Dưới đây là file junk.md được tạo ra từ 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

nói đúng, đây là lỗi của 'knitr' (https://github.com/yihui/knitr/issues/292); Tôi sẽ cố sửa nó sau; thanks –

+0

Tôi có [fixed] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) lỗi này trong phiên bản phát triển: https://github.com/yihui/knitr#readme Bạn chắc chắn có thể sử dụng 'fig .keep = 'last'', nhưng điều đó sẽ không được yêu cầu nữa. –

Trả lời

11

Có một cái nhìn tại http://yihui.name/knitr/options và đặc biệt fig.keep. Tôi nghĩ rằng bạn muốn 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") 

cho

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

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

chỉ là một lưu ý phụ - bạn có thể gọi 'knit (text = temp)' trực tiếp thay vì viết văn bản thành 'junk.Rmd'. –

Các vấn đề liên quan