web-dev-qa-db-ja.com

Rマークダウンでループ

次のようなRマークダウンドキュメントがあります。

The following graph shows a histogram of variable x:

```{r}
hist(x)
```

ループを導入したいので、複数の変数に対して同じことを行うことができます。仮説的に次のようなもの:

for i in length(somelist) {
  output paste("The following graph shows a histogram of somelist[[" , i, "]]")
  ```{r}
  hist(somelist[[i]])
  ```

それも可能ですか?

PS:より大きな計画は、データフレームを超えて、各列(たとえば、ヒストグラム、テーブル、ボックスプロットなど)に適切な要約を自動的に生成するプログラムを作成することです。その後、プログラムを使用して、最初のデータのデータを表示するときに行う探索的分析を含むマークダウンドキュメントを自動的に生成できます。

39
Merik

それはあなたが望むものでしょうか?

---
title: "Untitled"
author: "Author"
output: html_document
---


```{r, results='asis'}
for (i in 1:2){
   cat('\n')  
   cat("#This is a heading for ", i, "\n") 
   hist(cars[,i])
   cat('\n') 
}
```

この答えは、多かれ少なかれ here から盗まれました。

41
Alex

既に述べたように、すべてのループはコードチャンク内にある必要があります。各行のヘッダーとしてテキスト行を追加するよりも、ヒストグラムにタイトルを付ける方が簡単な場合があります。

```{r}
    for i in length(somelist) {
        title <- paste("The following graph shows a histogram of", somelist[[ i ]])
        hist(somelist[[i]], main=title)
    }
```

ただし、複数のレポートを作成する場合は、 このスレッド をチェックしてください。

この例 へのリンクもあります
レンダーコールがスクリプト内から行われると、環境変数をRmdファイルに渡すことができるようです。

そのため、Rスクリプトを使用することもできます。

for i in length(somelist) {
    rmarkdown::render('./hist_.Rmd',  # file 2
               output_file =  paste("hist", i, ".html", sep=''), 
               output_dir = './outputs/')
}

そして、Rmdチャンクは次のようになります。

```{r}
    hist(i)
```

免責事項:私はこれをテストしていません。

4
Will Hore-Lacy