2013-08-29 37 views
6

Khi tôi sử dụng knitr để xây dựng một tài liệu HTML ra khỏi đoạn mã sau:ngăn chặn knitr/Rmarkdown từ đan xen ra đoạn mã

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 nơi mã trong chunk1 là xen kẽ với đầu ra của cat báo cáo . Điều thú vị là đầu ra trong vòng lặp for là đầu ra dưới dạng một khối duy nhất.

Tôi muốn có tất cả các đang từ chunk1 xuất hiện đầu tiên, tiếp theo là tất cả các đầu ra từ chunk1. Có cách nào để hỏi Rmarkdown/knitr để tránh sự xen kẽ chi tiết hơn mà nó hiện đang làm không?

+0

Không hẳn nhận được những gì bạn muốn nhưng bạn có thể làm cho khối 2 mã mà là giống hệt nhau, một trong những nơi bạn 'eval = FALSE' và thứ hai, nơi bạn 'vang = FALSE'. –

+0

Tôi có thể làm điều đó. Hoặc tôi có thể bọc nội dung của các khối trong 'for (x in 1)', giữ Rmarkdown không xen kẽ đầu ra (với chi phí của mã thừa trong tài liệu của tôi). Nhưng tôi muốn có một lựa chọn để làm điều này đúng cách. Bất cứ ai biết nếu nó có thể? – Harlan

+1

@Harlan Tôi không nghĩ rằng điều này là dễ dàng bởi vì cách đan xử lý các khối này. Một hack tối thiểu sẽ được đặt khối bên trong '{}' – hadley

Trả lời

8

Dưới đây là giải pháp tôi đề nghị

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} 

``` 

Trong phiên bản mới nhất của knitr, @yihui đã bổ sung thêm một lựa chọn đoạn mới results = "hold", tự động giữ in ấn của tất cả các đầu ra đến cùng. Theo đó, chúng tôi chỉ có thể viết

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') 
``` 
Các vấn đề liên quan