21

私は多くの都市(数百)からの測定値を分析し、都市ごとに個別のレポートを作成する必要があります(Adobe pdf形式)。

私のプロセスは次のようなものです。

  1. X.Rdaに保存された、表示するデータを準備する最初のRStudio。
  2. X.Rnw(RStudio)で、X.Rdaを読み、1つの都市を選択して、テーブルとプロットを作成します。
  3. RStudioで「PDFのコンパイル」を押すと、都市レポートX.pdfが作成されます。
  4. 手順2に進み、別の都市を選択します。

これは非常に面倒で、都市ごとのforループに最適に見えますが、どのように実行できますか?

r-contributorsに感謝します!

/クリス

4

2 に答える 2

27

forレポートに織り込む都市を制御するグローバル変数を変更するループのようなものを使用できます。他の投稿を参照してください既存のRセッションからのオブジェクトでSweaveまたはknitrを実行します

citiesコードは次のようになります(文字ベクトルであると仮定knitrします。出力のファイル名を指定できるため、例としてパッケージを使用します)。

for (city in cities) {
   knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = ''))
}

city_template.Rnwには、次のようなチャンクがあります

<<do-my-job>>=
make_plot(city, ...)
whatever(city, ...)
@

次に、都市によって名前が付けられた一連のtexファイルを取得します。残りの作業は、それらをPDFにコンパイルすることです(RStudioが複数のtexファイルをコンパイルすることはできません。AFAIKですが、コマンドラインまたはRでtexi2dvi())。

注意が必要なことが1つありますfig.path。出力ファイルごとに異なるFigureプレフィックス(オプション)を使用する必要があります。そうしないと、異なる都市が互いのFigure出力を上書きする可能性があります。ではknitr、これは次のように実行できます。

<<setup, echo=FALSE>>=
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = ''))
@

ループのある多くのレポートを作成するには、これで安全だと思います。

ところで、Sweaveでも同じ目標を確実に達成できます。おそらくあなたは私がknitr後で開発した理由を知っているでしょう(これはトピックから外れているので、ここでは拡張しません)。

于 2011-12-15T17:18:18.363 に答える
0
  • R環境でそれを行います。
  • 特定の都市のすべての出力をリストに入れます
  • 出力を呼び出すだけのチャンクでRnWを記述します
  • RイメージをSweaveレポートと同じフォルダーに保存し、wdをこの同じフォルダーに設定します
  • Sweave( "yourfile.RnW"、output = "yourcity.tex")
  • texi2dviを使用して、Rからtexファイルをコンパイルします

多くの都市がある場合は、それを関数に入れる必要があります。

于 2014-02-12T09:19:31.837 に答える