守则如下:
RConnection connection = new RConnection();
String load_pkgs = "require(Rserve); require(forecast)";
connection.eval(load_pkgs);
String strx1 = "xData = read.table(\"D:\\\\R_TESTS\\\\ts_interval_data21.csv\",sep=\"|\",header=FALSE,col.names=c(\"a\",\"b\",\"c\",\"d\",\"xData\",\"f\"))[,\"xData\",drop=FALSE]";
connection.eval(strx1);
String strx2 = "x = xData[1:100,1]; fit = auto.arima(x);";
connection.eval(strx2);
String strx3 = "result = forecast(fit,h=12);";
connection.eval(strx3);
Object result = (Object)connection.eval("result").asNativeJavaObject();
HashMap map = (HashMap)result;
List<Object> objects = new ArrayList<Object>(map.keySet());
double values[] = (double[])objects.get(4);
for(int i=0;i<values.length;i++)
{
System.out.println((i+1)+":"+values[i]);
}
实际上我正在使用Rserve()连接在JAVA中运行R,现在每件事情都运行良好但是在运行程序时输出完全错误,而调试输出是完美的。我无法在代码中找到错误,请查看代码并留下您的建议。谢谢
我希望以下图片有所帮助:
1)图像描述了DEBUG模式下的输出
答案 0 :(得分:2)
这背后的原因是Java和R存储类型的根本区别。正如您可以在以下链接中阅读:Documentation for asNativeObject()此函数“尝试”将R返回类型转换为Java Object类。但这个程序每次都不成功。因此我建议你不要使用asNativeObject()函数。尝试使用其他功能找出解决方法。
您看到差异的原因是因为在调试和运行模式下创建的Java对象的内容和结构不同。