OriginでRを使うLT-Running-R
OriginとRを一緒に利用するいくつかの方法があります。
- R コンソールツール、またはRserve コンソールツールを使用します。これらのツールは、ダイアログインターフェースまたはコマンドを使用してOrigin環境内でRコマンドを投入でき、2つのアプリケーション間でデータを移せます。例は Rコンソールを使ったOriginでのデータ分析.
- LabTalk オブジェクト R および RS (RServe)R および RS は、Rコマンドを実行できるLabTalkオブジェクトで、変数とデータセットをLabTalkとOrigin間で受け渡します。
R オブジェクトとR コンソールを使用するには、Rがローカルのパソコンにインストールされている必要があります。RS オブジェクトとRserve コンソールを利用するには、サーバ側にRパッケージがインストールされているかつ、クライアント側にあるOriginと通信が出来ることが条件となります。
必要なOriginバージョン:2016SR0
スクリプトウィンドウでRコマンドを実行
LabTalkオブジェクトR および RS を使用してRコマンドを実行し、LabTalkとR間で変数の受け渡しが可能です。以下のサンプルは、R 及び RServe(Rの代わりにRSを使用)の両方で有効です。
R または RSの初期化
LabTalkでRコマンドを実行する前に、以下を実行してRアプリケーションを初期化します。
if( R.Init()<0 )
{
type -b "Please install R software first.";
return;
}
スクリプトウィンドウで実行します。
RSオブジェクトを初期化するには、以下のスクリプトを参考にしてください。パラメータ設定についてはこのページを確認してください。
if(RS.Init(***.***.**.**, 12306, user, password)<0) // アドレスはRservePC IP(例:192.168.18.75)
{
type -b "Initialize failed.";
return;
}
R および RS コマンドを実行
Rコマンドを実行
R.Exec(rand<-sample(x = 1:6, size = 50, replace = TRUE));
R.Exec(rand);
分析を実行します。
R.Exec(sum<-summary(rand));
R.Exec(sum);
サマリーを表示します。
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 2.00 3.50 3.56 5.00 6.00
複数のRコマンド行を実行
R.Exec("array<-1:25;dim(array)<-c(5,5);array") // セミコロンで区切った複数行のRコマンドを実行
RSコマンドを実行
string fname$ = system.path.program$ + "Samples\Curve Fitting\Sensor01.dat";
impasc;
range r1 = 1:2;
//ワークシートからR ベクターにデータを送る
RS.Send(%(r1), RR, 2); //範囲をR data.frame に送る
RS.Exec(fit<-lm(RR$Sensor.Output~RR$Displacement)); //線形フィットを実行
RS.Exec(fit);
R/RS コマンドのサンプルを実行
これらに加えて、Perform Logistic regression in R by using LabTalkのページに練習用サンプルがあります。
.R ファイルを実行
コンピュータ内の*.R ファイルを実行したい場合、スクリプトウィンドウで以下のシンタックスを使用します。
R.Exec(source(".R file path"));
例えば、
R.Exec(source("D:\\RData\\test.R"));
OriginのデータセットをRコンソールに送る
//ワークブックをアクティブにする
R.Send("1!1", arr1, 0); // 現在のワークブックのSheet 1、列1を変数 ''array'' (データ型 vector)としてRに送る
range rx=1; // 範囲表記 rx を使用してアクティブワークシートの列1を参照
R.Send(%(rx), rlabel, 0); // R変数 rlabel (type vector)に列1を送る
// 最初の列の値が1, 2, 3, -- のようになっているとする
range rr = 1; // アクティブなワークシートの最初の列を参照
R.Send(%(rr), temp, 0); // 最初の列をR変数tempとして送信
OriginのデータセットとしてR変数を受け取る
R.Receive("1!1",RMat,1) // R 行列変数 RMat を現在の行列ブックの最初の行列オブジェクトに受け取る
R.Receive("1!1",df$vec1,0); // Rデータフレーム 'df' 内のデータメンバー 'vec1' をベクトルとして列に受け取る
// 値 [1] FALSE FALSE TRUEの論理的なベクトルがあると仮定
range rl=1;
R.Receive(%(rl),temp,0); // 代わりにアクティブシートの列1を 0,0,1 に
Labtalk と R 間の変数の受け渡し
RオブジェクトとRSオブジェクトには、GetReal、SetReal、GetStr、SetStrの4つのメンバー関数があり、LabtalkとRの間で数値変数と文字列変数を渡すために使用されます。次に例を示します。
数値または文字列の変数をR Serveコンソールで定義します。
Rvar=16
Rstr="height"
e1=list(name="Apple", a=3)
LabTalk変数に値を渡します。
R.GetReal(LTVar, Rvar)
R.GetStr(LTStr$, Rstr)
//pass a real number in a R list 'e1' to a Labtalk variable
R.GetReal(LTVar,e1$a);
または、LabTalk で数値または文字列変数を定義し、R変数に渡すこともできます。
R.SetReal(LTVar2, Rvar)
R.SetStr(LTStr2$, Rstr)
R コンソールまたはRserve コンソールの利用
Rコンソール(またはRserve コンソール)を使用してダイアログ入力ボックスで直接コマンドを実行し、<< および >>のボタンを使用してOriginのワークシートに結果の値を受け渡すことができます。Rコンソール(Rserveコンソール)を使用して、RとOriginワークシート(行列シート)間でデータを複数のフォーマット (vector, matrix, data.frame) に変換できます。
以下のグラフは、二項分布のランダムデータを生成し、Originのワークシートに送る方法を説明しています。
|