2016-06-24 22 views
1

Der Kodex ist unter:in Ergebnissen zwischen Laufen und dem Debuggen des Java-Programms mit Embedded R-Code

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

tatsächlich innerhalb der JAVA Ich bin mit R mit rserve() -Verbindung, jetzt alles funktioniert gut, aber Wenn das Programm ausgeführt wird, ist die Ausgabe völlig falsch und beim Debuggen ist die Ausgabe perfekt. Ich kann den Fehler in meinem Code nicht finden. Bitte überprüfen Sie den Code und hinterlassen Sie Ihre Vorschläge. Vielen Dank, dass Sie

ich die folgenden Bilder hoffentlich helfen:

1) Bild zeigt Ausgabe im Debug-Modus

This Image depicts output in DEBUG mode 2) Bild

This Image depicts the output in normal RUN mode

Antwort

2
die Ausgabe im normalen RUN-Modus zeigt

Der Grund dafür liegt in den grundlegenden Unterschieden zwischen den Speicherarten Java und R. Wie Sie in folgendem Link nachlesen können: Documentation for asNativeObject() versucht diese Funktion R-Return-Typen in die Java-Object-Klasse zu konvertieren. Aber dieses Verfahren ist nicht immer erfolgreich. Und so würde ich vorschlagen, dass Sie nicht die Funktion asNativeObject() verwenden. Versuchen Sie, eine Problemumgehung mit anderen Funktionen zu finden.

Der Grund für den Unterschied liegt darin, dass sich das im Debug- und im Ausführungsmodus erstellte Java-Objekt in Inhalt und Struktur unterscheidet.

+0

Vielen Dank @Brijesh Kumar Sahoo – balu

+0

Bitte upvote, wenn Sie die Antwort mögen. Vielen Dank. – brijs