69

データフレーム内の各数値フィールドのヒストグラムを生成する自動 Knitr レポートを作成したいと考えています。私の目標は、実際のフィールドを指定せずにこれを行うことです (このデータセットには 70 以上が含まれており、スクリプトも再利用したいと考えています)。

私はいくつかの異なるアプローチを試しました:

  • プロットをオブジェクトに保存し、ループ後に p呼び出すp
    • これは最終プロットのみをプロットします
  • プロットの配列を作成しPLOTS <- NULL、ループ内にプロットを追加するPLOTS <- append(PLOTS, p)
    • これらのプロットへのループ外へのアクセスはまったく機能しませんでした
  • それぞれをファイルに保存しようとしました.pngが、各ファイルを保存してから再アクセスするオーバーヘッドに対処する必要はありません

プロット デバイスの複雑さが私を逃れているのではないかと心配しています。

質問

次のチャンクがループ内の各プロットをレポートに出力するようにするにはどうすればよいですか? 現在、私が達成できる最善の方法は、それをオブジェクトに保存し、そのオブジェクトをループの外で呼び出すことによって生成される最終的なプロットの出力です。

knitrRStudioで使用するRマークダウンチャンク:

```{r plotNumeric, echo=TRUE, fig.height=3}
suppressPackageStartupMessages(library(ggplot2))
FIELDS <- names(df)[sapply(df, class)=="numeric"]
for (field in  FIELDS){
  qplot(df[,field], main=field)  
}
```

この時点から、プロットをさらにカスタマイズしたいと考えています。

4

5 に答える 5

59

qplotで包みprintます。

knitrがループの外にある場合はそれを行いますqplotが、(少なくとも私がインストールしたバージョンでは)ループ内でこれを検出しません(これはRコマンドラインの動作と一致しています)。

于 2012-08-15T09:46:05.637 に答える
3

printHugoの優れた回答に加えて、2016年にはコマンドも含める必要があると思います:

```{r run-numeric-md, include=FALSE}
out = NULL
for (i in c(1:num_vars)) {
  out = c(out, knit_child('da-numeric.Rmd'))
}

`r paste(out, collapse = '\n')`
```
于 2016-12-12T04:30:38.427 に答える