私のアプリケーションは、次のようなR操作を実行する必要があります。
m = matrix(sample(0:1,100, rep=T),ncol=10)
結果は、Javaアプリケーションで利用できるはずです。
Rserveパッケージ は、TCP/IPサーバーとして機能するため、Rを他の言語にブリッジします。私はウェブサイトを読みましたが、Rserveを使用できる最も単純なアプリケーションの作成方法がわかりません。
Rserveを使用してJavaからRコマンドを実行する単純なEclipseアプリケーションを作成するには、どのような手順が必要ですか?
ダウンロードセクションにRserveのバイナリバージョンがあります(www.rforge.net/Rserve/files/バージョンR 2.13とWindows XPがあるので、Windowsバイナリをダウンロードする必要があります:Rserve_0.6-8.Zip(541.3kb、更新済み:水4月18日07:00:45 2012))。 R.DLLを含むディレクトリにファイルをコピーします。 CRANからRserveをインストールした後
install.packages("Rserve")
r(私はRStudioを持っている-便利なもの: Download RStudio IDE )。開始されたRserveはR内からです。
library(Rserve)
Rserve()
タスクマネージャーのСheck-Rserve.exeを実行する必要があります。 Javaプロジェクトを作成した後、そのプロジェクトの下にlibというディレクトリを作成します。ここに2つのjarを貼り付けますRserveEngine.jarおよびREngine.jar(www.rforge.net/Rserve/files/)。 Javaプロジェクトのプロパティにこのjarを追加することを忘れないでください。
import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;
public class rserveuseClass {
public static void main(String[] args) throws RserveException {
try {
RConnection c = new RConnection();// make a new local connection on default port (6311)
double d[] = c.eval("rnorm(10)").asDoubles();
org.rosuda.REngine.REXP x0 = c.eval("R.version.string");
System.out.println(x0.asString());
} catch (REngineException e) {
//manipulation
}
}
}
ここでは、RServeプロジェクトを最初から作成するための詳細な手順をいくつか示します。
リモートアクセスの場合:
以下をRserv.confに追加します
workdir /tmp/Rserv
remote enable
auth required
plaintext disable
port 6311
maxsendbuf 0 (size in kB, 0 means unlimited use)
R:次のコマンドを実行します
library(Rserve)
Windowsの場合:
Rserve()
Mac用:
Rserve(args="--no-save")
Rserveのインスタンスがlocalhostポート6311で実行されています。
このため、私はEclipseを使用します。
このコードをクラスに追加します
package com.sti.ai;
import Java.io.BufferedReader;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.FileReader;
import Java.io.IOException;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
public class HelloWorldApp {
public static void main(String[] args) throws RserveException, REXPMismatchException, FileNotFoundException, IOException {
RConnection c = new RConnection("<Host/ip>", 6311);
if(c.isConnected()) {
System.out.println("Connected to RServe.");
if(c.needLogin()) {
System.out.println("Providing Login");
c.login("username", "password");
}
REXP x;
System.out.println("Reading script...");
File file = new File("<file location>");
try(BufferedReader br = new BufferedReader(new FileReader(file))) {
for(String line; (line = br.readLine()) != null; ) {
System.out.println(line);
x = c.eval(line); // evaluates line in R
System.out.println(x); // prints result
}
}
} else {
System.out.println("Rserve could not connect");
}
c.close();
System.out.println("Session Closed");
}
}
最後に、HelloWorldApp.Javaを実行します。
Mavenをお使いの方へ
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>Rserve</artifactId>
<version>1.8.1</version>
</dependency>
簡単なもの、タスクを分離しようとしています:
Rserveは単独でインストールできます。そこから始めましょう。
Rserveにはサンプルクライアントがあります。 Javaサンプルが機能するようにしてください。
そこから、新しいプログラムを作成します。
Eclipseは完全にオプションです。使用する必要はありません。これがもう1つのステップである場合は、スキップすることを検討してください。 1から3が問題なければ、ビルドの依存関係をEclipseで表現する方法を学びます。