2016-08-16 47 views
0

JavaコードからRスクリプトを実行しようとしています。 これは私がRserve:接続が拒否されました:接続

library(Rserve) 
    Rserve() 
    x= matrix(c(1,2,3,4,5,6)) 
    plot.ts(x) 

Iチュートリアルからのサンプルコードを使用していると私の知る限り、TestRserve Javaで実行されていないが、以下のよう

package pkg; 

import org.rosuda.REngine.REXPMismatchException; 
import org.rosuda.REngine.Rserve.RConnection; 
import org.rosuda.REngine.Rserve.RserveException; 

public class Temp { 
public static void main(String a[]) { 
    RConnection connection = null; 

    try { 
     /* Create a connection to Rserve instance running on default port 
     * 6311 
     */ 
     connection = new RConnection(); 

     connection.eval("source('D:\\\\r script\\\\TestRserve.R')"); 
     connection.eval("Rserve()"); 
     int num1=10; 
     int num2=20; 
     int sum=connection.eval("myAdd("+num1+","+num2+")").asInteger(); 
     System.out.println("The sum is=" + sum); 
    } catch (RserveException e) { 
     e.printStackTrace(); 
    } catch (REXPMismatchException e) { 
     e.printStackTrace(); 
    } 
} 
} 

TestRserve.Rである持っているJavaコードでありますファイル。私もスレッド「メイン」org.rosuda.REngine.Rserve.RserveExceptionでスタックトレース

例外では以下のTestRserve.R

 REXP x; 
     System.out.println("Reading script..."); 
     File file = new File("D:\\r script\\TestRserve.R"); 
     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 
      } 
     } 

を実行するには、以下のようなものを試してみました:接続できません:接続が拒否されました: をorg.rosuda.REngine.Rserve.RConnectionに接続します(RConnection.java:88) at org.rosuda.REngine.Rserve.RConnection。(RConnection.java:60) at org.rosuda.REngine .Rserve.RConnection。(RConnection.java:44) at functionTest.HelloWorldApp.main(HelloWorldApp.java:17)

答えて

1

コードから認識できるRserveについての誤解がたくさんあります。

まず、Rserveはサーバーであり、Rserve JARファイルはnpmにJavaScriptクライアントがあるように、Rserveとやりとりするクライアント実装を提供します。

したがって、Rserveを介してRスクリプトを呼び出すには、Rserveサーバーを起動して呼び出しを待つ必要があります。これは、使用してRから行うことができます。これもものの

Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla"); 

library(Rserve) 
Rserve() 

またはLinuxのbashの または、実行時にアクセスするためにJavaRuntimeのAPIを使用してJavaから直接呼び出しから直接,: R CMD Rserve --vanilla Linuxのみで動作します。

次に、Javaクライアントコードを実行してRserveサーバーに接続し、eval()すべてのRコマンドをRserve経由で実行する必要があります。

関連する問題