从循环

时间:2017-03-04 04:31:16

标签: r ggplot2 knitr r-markdown tidyverse

我正在从RMarkdown文档的循环中创建一系列绘图,然后将其编织为PDF。我可以毫无问题地做到这一点,但我希望标题反映每个情节之间的变化。 MWE如下所示:

---
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中,并尝试使用它来生成字幕,但这不起作用。尽管这肯定是许多人需要做的事情,但我并没有在SO上发现太多。我确实找到this question,但看起来很复杂,我想知道是否有一个我想念的清晰简单的解决方案。

我想知道它是否与eval.after有关,与this question一样,但这不涉及在循环中生成的图。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

似乎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 = .))
)
```