2016-06-23 11 views
2

私は現在、rcallerを使用してmysqlデータベースに基づく分析回帰を行っています。今私は、JavaからRへのデータベーステーブルを取る方法に立ち往生しています。 これは私が試みたものです。以下Rcallerを使用してJavaからRにデータベーステーブルを取り込む方法は?

Class.forName("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection(DB_URL,USER,PASS); 
      stmt = conn.createStatement(); 
      String sql; 
      sql = "SELECT bf,ibt,rate FROM testing"; 
      ResultSet rs = stmt.executeQuery(sql); 
      while(rs.next()){ 
       float bf = rs.getFloat("bf"); 

      }   
      RCaller caller = new RCaller(); 
      RCode code = new RCode(); 
      caller.setRscriptExecutable("C:/Program Files/R/R-2.15.0/bin/Rscript.exe"); 
      code.clear(); 
      caller.setRCode(code); 

      code.R_require("rpart");   
      code.addRCode("ad.apprentissage= rpart(rate~, data=rs,cp=0.1)"); 
      code.addRCode("predArbreDecision=predict(ad.apprentissage,newdata=rs,type='class') "); 

      File file = code.startPlot(); 
      code.addRCode("plot(ad.apprentissage)"); 
      caller.runOnly(); 
      ImageIcon ii = code.getPlot(file); 
      code.showPlot(file); 

しかし、この行は動作していないようだ。

code.addRCode("ad.apprentissage= rpart(rate~, data=rs,cp=0.1)"); 

私はエラーなしではなく、空の出力と、このプログラムをrunnedています。

答えて

0

RCallerの3.0バージョンを使用してdata.framesを使用して、JavaからRへデータを渡すことができます。バージョン3.0 はdata.frameオブジェクトの最小のサポートを有し、それは同様に使用することができるようにRへ、Javaからデータを転送するために使用することができる

Object[][] objects = new Object[][]{{1,2,3}, {"a", "b", "c"}}; 
String[] names = new String[] {"numbers", "letters"}; 
DataFrame dataFrame = DataFrame.create(objects, names); 

とクラスRCODEのメソッドaddDataFrame():

RCode rCode = RCode.create(); 
rCode.addDataFrame("df", dataFrame); 

このdata.frameオブジェクトのスロットたとえば

rCode.addRCode("mymean <- mean(df$numbers)"); 

はDFにおける数値の平均のための変数を作成R.でアクセス可能です。 RCallerはデータフレームオブジェクトを効率的に渡すので、データ転送コストは特にデータフレームではあまり大きくありません。

さらに、データベースエンジンに直接接続し、R側でSQLクエリを実行するRファイルを作成できます。たとえば、データがMySQLデータベースに格納されている場合は、RMySQLパッケージが適しています。

+0

RCallerを作成する方法caller = new RCaller(); Rcaller 3.0を使用している場合 –

関連する問題