我使用 R 与 Java 到 Rserve , 我想在R中使用预测 w.r.t ARIMA ,但用于预测的值/数据存在于 postgres 数据库中。 我也知道我可以直接在R中使用 RPostgreSQL 来从DB获取数据,但是在发送到RI之前想要在JAVA中处理DB数据我想转移到R,所以对于这个我能够从 postgres DB 获取数据,然后我立即处理原始的float / double数组类型,我试图通过'Rserve'发送给R 并且它正在抛出语法错误异常。我对这个R完全不熟悉,我发现很难做到这一点。 请任何人审核问题并评论您的建议。
为了更好地理解,请查看以下代码段:
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*/
我还希望直接在 JAVA 中使用 ARIMA 和预测技术,而不使用 R 。 我选择R的事情是R可以执行ARIMA和预测技术。如果有任何开源API或JAVA库让我尽快。
对于Exception详细信息,我附在图片下方:
谢谢
答案 0 :(得分:2)
正如您在RConnection文档中所看到的,eval函数将String作为其参数。因此,您需要创建一个格式正确的R。
的String这可能有效:
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()用于接收输出(在评估eval()内发送的字符串后由R生成),并将它们存储为Java Double类型。它不是将Double数组发送给R的东西.Rserve中没有这样的方法。