使用嵌入式R代码运行和调试JAVA程序之间的结果不同

时间:2016-06-24 10:52:18

标签: java r rserve

守则如下:

      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模式下的输出

This Image depicts output in DEBUG mode  2)图像描绘了正常RUN模式下的输出

This Image depicts the output in normal RUN mode

1 个答案:

答案 0 :(得分:2)

这背后的原因是Java和R存储类型的根本区别。正如您可以在以下链接中阅读:Documentation for asNativeObject()此函数“尝试”将R返回类型转换为Java Object类。但这个程序每次都不成功。因此我建议你不要使用asNativeObject()函数。尝试使用其他功能找出解决方法。

您看到差异的原因是因为在调试和运行模式下创建的Java对象的内容和结构不同。