もっとクリーンな方法があれば分かりませんが、これを解決する方法は、Javaプログラム内からコンソールスタイルを起動することです。これが機能するためには、あなたのシステムパスにRの実行ファイルへのパスを入れてあります。
public Process rserve = null;
public static void startRServer() throws InterruptedException, IOException {
// check the runtime environment to see if there's an active Rserve running
String existingRserve = "";
try {
Process p = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq Rserve.exe\"");
p.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
existingRserve = in.readLine();
} catch(IOException e){}
if(rserve == null || existingRserve.contains("No tasks are running")) {
// start and rserve if we don't have one for this run yet,
// or if it has unexpectedly failed since we last used it
try {
rserve = Runtime.getRuntime().exec("Rscript -e \"library(Rserve); Rserve()\"");
rserve.waitFor();
} catch (IOException e) {
System.out.print("*** R Error: Unable to start the R server ***");
}
}
}
JRIを使用するには、異なるDLLディレクトリとjarファイル私の懸念は、私は別のコンピュータで私のプロジェクトを使用する場合、私は再びすべてのパスをリセットする必要があるということです?私のアプリをデプロイする場合、パスはどのように設定されますか? –
通常、Rscript実行可能ファイルのフォルダをアプリケーションのPATHに入れますが、rsessionを見るとレジストリからRインストールフォルダを読み込もうとすると同時に、実行可能ファイルを見つけるための一般的なパスも試行されます。しかし、ライブラリを改良して設定可能なパスを追加して検索することもできるので、メインアプリケーション(または理想的にはむしろシステムプロパティ)の起動パラメータを使って設定することができます。 – subes
ああ、私はあなたがJRIについて尋ねたことに気づきました(上記のコメントはRsessionです)。また、libがjava.library.pathに追加して、私が提供しているシステムプロパティの代わりに見つけられるようにすることもできますinvesdwin-contextプロジェクトで提供されているようにAMainクラスを使用している場合は、コマンドライン引数 "-Dproperty.name = value"を使用してアプリケーションを起動します)。ただし、問題は常にネイティブライブラリと同じです。そのため、RCaller、Rserve、RenjinのサポートをJRIの代替として追加しました – subes