Rは、統計データ処理とグラフィックスのためのプログラミング言語であり、GNUプロジェクト©Wikipediaのフレームワークにおける無料のオープンソースコンピューティング環境です。Rはあらゆる場面で膨大な数の統計アルゴリズムを収集しており、ネイティブソフトウェア環境からだけでなく、SPSS、Statistica、SAS、Wolfram Mathematicaなどの有名な数学パッケージでサポートされています。 Rをアプリケーションに統合するにはどうすればよいですか?
HabrahabrにはC ++でRを使用すること
に関する記事が既にありましたが、コードがGPL互換ライセンスで配布されている場合にのみ使用できる方法の1つに焦点を当てました。 しかし、それ以外の場合は解決策があります-Rserveパッケージを使用します。
サーブ
Rserveは、ライブラリにリンクしなくても
Rの機能を使用できるTCP / IP / UNIXソケットサーバーです。 クライアントは、C / C ++、Java、PHPなどのさまざまな一般的な言語で実装されます。 LGPLの下で配布される顧客コード。
RとRserveをインストールします。
これで、Rserveを実行できます。
デバッグモードもあります
パラメータなしで起動すると、Rserveはデフォルトポート(6311)でTCP / IPサーバーモードで動作します。 UNIXソケットを使用するには、-RS-socketフラグを指定してRserveを実行します
入力可能なフラグのリストを表示するには、次のように入力します
C ++クライアント
C ++クライアントは4つのヘッダーファイルで構成されます:
Rconnection.h (ここで動作するために必要なすべての広告)、
Rsrv.h 、
config.h (Windowsでのみ必要)、
sisocks.h (クロスプラットフォームソケット)、1つの
Rconnection.cc 。 これらはすべて
guthubの公式
リポジトリから取得でき
ます 。
それでは、主な操作のほとんどをカバーする
デモを見てみましょう
メモリ管理に関する注意:必要なすべてのメモリは、「eval」を呼び出すときに暗黙的に作成されるRmessageオブジェクトによって割り当てられます。 このオブジェクトの所有者はRexpであり、これはevalによって返されます(メインオブジェクトと呼びましょう)。 メイン以外のRexpをリリースすることはできません! メインRexpに関連付けられている他のRexpは、メインRexpのリリース後に無効になります。 また、メインRexpを解放すると、すべてのポインターが無効になります(たとえば、doubleArray()メソッドによって返されます)。
コンパイルする
そして走る
できた! Rインターフェイスの詳細については、Rconnection.hを参照してください。
Rserv.conf
構成ファイルRserv.confについて少し説明します。 Rserveの開始時にRコードを実行する興味深い機会を提供します。 デフォルトの構成ファイルは/etc/Rserv.confで検索されますが、Rserveの起動時に--RS-confフラグを使用して別のパスを指定することもできます。 Rserv.confには次のオプションが含まれる場合があります。
workdir [/tmp/Rserv]
pwdfile [none=disabled]
remote enable|disable [disable]
auth required|disable [disable]
plaintext enable|disable [disable]
fileio enable|disable [enable]
interactive yes|no [yes] (since 0.6-2)
( 0.1-9):
socket [none=disabled]
port [6311]
maxinbuf [262144]
( 0.3):
maxsendbuf [0=unlimited]
uid [none]
gid [none]
su now|server|client [none] (since 0.6-1)
( 0.3-16):
source
eval
( 0.5 unix):
chroot [none]
sockmod [0=default]
umask [0]
( 0.5-3):
encoding native|utf8|latin1 [native]
Rserve C++ , . , - .
PS load-balancer Rserve: RSproxy .
UPDATE: Windows Ws2_32.lib.