2016-06-28 10 views
0

を経由JAVAからベクトルとしてRへのfloat/double配列を送信するためにはどうすればRにARIMA WRT を予測を使用したいです予測に使用する値/データはpostgres DBにあります。 RPostgreSQLをRから直接取得してDBからデータを取得することもできますが、RIに送信する前にJAVAでDBデータを処理したい場合は、後でRに転送したいと思いますポストグルDBからデータを取得することができ、すぐにプリミティブフロート/ダブル配列型に処理し、'Rserve'を通してRに送信しようとしています。の例外エラーを投げています。私はこのRにはまったく新しいので、これを作るのが難しいと思っています。 誰でも問題を確認し、あなたの提案をコメントしてください。は私が<strong>を通じて<strong>でRserve</strong>、 をJavaの</strong>を<strong>R</strong>を使用していRServe

より良く理解するために以下のスニペットを表示してください:

List<Float> xfval = new ArrayList<Float>(); 
Statement data_statement = dbComp.createStatement(); 
String command = "SELECT * FROM to_forecast"; 
ResultSet res=data_statement.executeQuery(command); 
while(res.next()) 
{ 
    xfval.add(res.getFloat("values")); 
} 
/* 
* 
Here I have process data of 'xfval' 
w.r.t to condition but I'm not disclosing any 
logic w.r.t to processing 
* 
* 
*/ 

RConnection connection = new RConnection(); 
String load_pkgs = "require(Rserve); require(forecast)"; 
connection.eval(load_pkgs); 
float[] floatArray = ArrayUtils.toPrimitive(xfval.toArray(new Float[0]), 0.0F); 

//below line is that where I'm getting the syntax error exception 
connection.eval("xData=("+floatArray+")").asDouble(); 
String strx2 = "x = xData[1:100,1];"; 
connection.eval(strx2); 
/*the code continues*/ 

をそして私はまた、Rを使用せずにARIMA技術を予測直接JAVAでを使用して提案を持っていると思います。 私がRを選んだのは、RがARIMAと予測技術を実行できるということです.JAVAのためのオープンソースAPIやライブラリがあれば、私はできるだけ早く呼び出せます。私は画像の下に添付しています例外の詳細については

:あなたはRConnectionのドキュメントで見ることができるように

Exception for Syntax Err

はあなたに

+0

xData =( "+ floatArray +" 'xData =(" + Arrays.toString(floatArray)+ "'を試してみましたか? – BevynQ

+0

@BevynQあなたの提案は何の効果もありませんでした... :(Rを使わずにJavaで予測するためのテクニックを知っていれば教えてください – balu

答えて

2

ありがとう、のeval関数は、引数として文字列を取ります。だから、これは動作する可能性があり、適切R.

用にフォーマットされた文字列を作成する必要があります。

String rVectorStr=""; 
    for(int i=0;i<floatArray.length;i++) { 
     if(i==floatArray.length-1) 
      rVectorStr=rVectorStr.concat(String.valueOf(floatArray[i])); 
     else 
      rVectorStr=rVectorStr.concat(String.valueOf(floatArray[i])+","); 
    } 
    //System.out.println(rVectorStr); 
    connection.eval("xData=c("+rVectorStr+")"); 
    String strx2 = "x = xData[1:100,1];"; 

as.Doubleは()(内部送信された文字列を評価した後にRによって生成された出力を受信するために使用されますeval())を作成し、JavaのDouble型として格納します。 Double配列をRに送るものではありません.Rserveにはそのようなメソッドはありません。

+0

必要ならさらに説明して幸せです – brijs

+0

こんにちは、アルマモデルを使用して、変電所使用量のようないくつかのxdataを予測して将来の負荷を予測してください。もし完全にJAVAでやる方法が分かっているなら、私に指示してください。 – balu

+0

特にJavaの予測に重点を置いています。あなた自身の予測アルゴリズムを実装することを決定したApache Commons Mathライブラリを見てください。そうでなければ、Rが好ましい方法です。ユースケースに応じて、Rの予測パッケージには何度も不具合が繰り返されます。とにかく、上のコードは役に立ちましたか? – brijs

関連する問題