Различия в результатах между запуском и отладкой программы JAVA со встроенным кодом R

Код ниже:

      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]);
        }

на самом деле я запускаю R внутри JAVA, используя соединение Rserve(), теперь все работает нормально, но при запуске программы вывод будет совершенно неверным, а при отладке вывод будет идеальным. Я не могу найти ошибку в своем коде, пожалуйста, просмотрите код и оставьте свои предложения. Благодарю вас

Я надеюсь, что следующие изображения помогут:

1) Изображение показывает вывод в режиме DEBUG.

На этом изображении показан вывод в режиме DEBUG 2) На изображении показан вывод в обычном режиме RUN.

На этом изображении показан вывод в обычном режиме RUN


person balu    schedule 24.06.2016    source источник


Ответы (1)


Причиной этого является фундаментальная разница в типах хранения Java и R. Как вы можете прочитать по следующей ссылке: Документация для asNativeObject( ) эта функция «пытается» преобразовать возвращаемые типы R в класс Java Object. Но эта процедура не каждый раз бывает успешной. И поэтому я бы посоветовал вам не использовать функцию asNativeObject(). Попробуйте найти обходной путь, используя другие функции.

Причина, по которой вы видите разницу, заключается в том, что объекты Java, созданные в режимах отладки и выполнения, различаются по своему содержанию и структуре.

person brijs    schedule 01.07.2016
comment
Спасибо @Brjesh Kumar Sahoo - person balu; 04.07.2016