2012-02-22 7 views
5

私はRとSweaveを使ってレポートを生成しています。R/Sweave引数

R CMDはSweave MyReport.Rnw

レポートがあるので、私はRコードに引数を送信できるようにしたい、もちろん、「ダイナミック」。だから、私はしたいと思いますこのような何かを行うことができる:

R CMDはSweave MyReport.Rnw PatientId = 5

... Rコードで変数のPatientIdの値を読み取らせてください。

どうすればよいですか?誰かが環境変数を使用して言及しましたが、それは非エレガントなソリューションのようです。

答えて

5

Rコマンドラインから渡された引数を取得するには、あなたが機能commandArgs()を使用していますが、残念ながらR CMD Sweaveすることができます余分なコマンドラインオプションはサポートしていません。ただし、スウェーブをR -eで呼び出すことはできます。 MyReport.Rnw

R -e "Sweave('MyReport.Rnw')" --args PatientId=1 

、あなたはあなたに、この場合の文字列PatientId=1を与える、commandArgs(TRUE)にいくつかのテキスト処理を行います。

しかし、より良い方法は、Sweave()をRスクリプトで使用することです。;例えばこの場合には、あなたは

PatientId <- 1 
Sweave("MyReport.Rnw") 

ようなスクリプトでプロセスを記述することができ、MyReport.Rnwには、グローバル変数に直接PatientIdを使用しています。一連のレポートを生成する場合は、PatientIdのループを使用することもできます。

1

あなたは「書き込み」に、それは「読み取り」することができます値必要があります述べたように、

  • 環境変数をすることができますsys.getenv()

  • 設定やデータファイルで簡単にアプローチしています読み

  • データ・ベース・ストレージ

などの頁10

そのRコードを思い出して本当にはそうあなたが常に2つのステップを行うことができますが実行されます。

rScriptOne.r     # write to foo.txt 
R CMD Sweave MyReport.Rnw  # reads from foo.txt 
+0

多くの場合、環境変数は1つのシステムに固有であるため、再現性の高いリサーチでは適切ではないと私は信じています。 –

+0

彼らは私のお気に入りではありませんが、例えばRはそれらをシーンの背後にあるメトリックトンに使用し、違いのプラットフォームやシステムでうまくいきます。 –