2017-03-04 53 views
1

我從一個RMarkdown文檔的循環內創建一系列圖,然後將其編織爲PDF。我可以做到這一點沒有任何問題,但我希望標題能夠反映每個情節之間的變化。一個MWE如下所示:從循環打印RMarkdown字幕

--- 
title: "Caption loop" 
output: pdf_document 
--- 

```{r, echo=FALSE} 
library(tidyverse) 

p <- 
    map(names(mtcars), ~ggplot(mtcars) + 
     geom_point(aes_string(x = 'mpg', y = .))) %>% 
    set_names(names(mtcars)) 
``` 

```{r loops, fig.cap=paste(for(i in seq_along(p)) print(names(p)[[i]])), echo=FALSE} 
for(i in seq_along(p)) p[[i]] %>% print 
``` 

我已經捕捉情節和可變p存儲,並試圖用它來生成字幕第一次嘗試,但是這是行不通的。儘管這肯定是許多人需要做的事情,但我沒有在這方面發現太多。我確實發現了this question,但它看起來如此複雜,以至於我想知道是否有一個清晰而簡單的解決方案,我錯過了。

我想知道它是否與eval.after有關,與this question一樣,但不涉及循環內生成的圖。

非常感謝您的幫助!

+0

我可能沒有正確理解問題,但問題可能只是沒有標題的情節。如果我們只想要標題中的當前繪圖變量,我們可以在'〜ggplot'語句中添加'+ ggtitle(。)' –

回答

1

看起來knitr足夠聰明,可以自動完成任務。通過將names(mtcars)添加到數字標題中,knitr依次迭代以產生正確的標題。現在唯一的問題是如何停止打印在文檔中的所有列表索引...

--- 
title: "Caption loop" 
output: pdf_document 
--- 

```{r loops, fig.cap=paste("Graph of mpg vs.", names(mtcars)), message=FALSE, echo=FALSE, warning=FALSE} 
library(tidyverse) 

map(
    names(mtcars), 
    ~ ggplot(mtcars) + 
    geom_point(aes_string(x = 'mpg', y = .)) 
) 
```