スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Rを使って統計処理 その2

 前回、R.NETを使用してC#でRを使った計算を行いましたが、R.NETだとRエンジンインスタンスが1つしか生成できないなどの理由で別の方法を探すことにしました。
 今回はその代替案について紹介します。
 普段Rを使って処理を行う場合はRコンソールを使用してRコマンドを実行していきますが、Rコンソールを使用せずに処理を行うバッチモードというものが用意されています。
 このバッチモードを使えばコマンドプロンプトでRスクリプトを実行できるようになります。

 Rをインストールするとバッチモード用のプログラムも一緒にインストールされます。
 Program Files¥R¥R-x.x.x¥binの中に入っているRscript.exeがバッチモード用のRプログラムです。
 Rscript.exeを使ってRに処理をさせるには、このフォルダへパスを通し、コマンドプロンプトで以下の様にコマンドを入力します。
Rscript --slave --vanilla SCRIPT_FILE
 --slaveは標準出力に余計な出力をださせない為のオプションで、--vanillaはスクリプト起動にあたって余計なオブジェクト等を読み込ませないようにする為のオプションです。
 オプションの後にRでの処理を記載したスクリプトファイルを指定します。
 もしそのスクリプトが引数を取るのであればスクリプトファイルの後ろに引数を続けて指定します。
 試しに指定範囲(引数で指定)から重複を許してランダムサンプリングするスクリプトを作成し、バッチモードで動かしてみます。
# コマンドライン引数処理
argv <- commandArgs(T)
a <- as.numeric(argv[1])
b <- as.numeric(argv[2])

# 重複を許してサンプリング
values <- a:b
sample <- sample(values, 8, T)
cat(sample, "n")
 起動引数を取得したい場合はcommandArgs()関数を使用します。
 引数にT(True)を指定することでスクリプトの引数のみを取得できます。
 引数は文字列として取得されるのでas.numeric()関数を使用して数値に変換しています。
 後は指定した範囲の数値ベクターを作成し、sample()関数を使用して指定範囲から重複を許して8個の数値をランダムに取り出しています。
 結果はcat()関数を使用して標準出力に出力しています。
 cat()関数は改行されないので最後に改行コードを指定しています。
 このファイルをsample.Rという名前で保存します。(Rスクリプトの拡張しは.Rにします)
 コマンドプロンプトで以下の様にコマンドを入力して処理を実行します。
Rscript --slave --vanilla sample.R 1 10
 結果は以下の様に出力されます。(ランダムサンプリングなので実行する度に結果は変わります)
8 8 6 7 8 3 10 6
 C#からRスクリプトを実行したい場合はProcessクラスを使用してRスクリプトを実行するだけです。
 データや結果をやり取りするために一旦ファイルに保存してから処理を行うことが多くなりますが、並列処理も可能ですし処理速度もRコンソールで行う場合とほとんど同じです。
 ちょっと不便なところもありますが、十分使い物になると思います。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

カレンダー
02 | 2016/03 | 04
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。