OriginでRを使う

OriginとRを一緒に利用するいくつかの方法があります。


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オブジェクトには、GetRealSetRealGetStrSetStrの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のワークシートに送る方法を説明しています。

R Send Data.png