2017-03-04 48 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 = .)) 
) 
```