2017-03-04 10 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を見つけましたが、それは私が欠けている明確かつ単純な解決策があるかどうか疑問に思っていたので、とても複雑に見えます。

this questionのように、eval.afterと何か関係があるのだろうと思ったが、ループ内で生成されたプロットは含まれていなかった。

ご協力いただきありがとうございます。

+0

プロンプトにはタイトルが正しくない可能性があります。現在プロットされている変数をtitileに入れたいだけなら、 '+ ggtitle(。)'を '〜ggplot'文に追加することができます –

答えて

1

knitrは自動的にタスクを実行するのに十分スマートです。 Figureのキャプションに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 = .)) 
) 
```