2016-08-01 25 views
0

Ich schreibe eine Java Anwendung in IntelliJ IDE. Die Anwendung verwendet Rserve(), um eine Verbindung zu R herzustellen und auf Skripts zuzugreifen. Die erste Frage ist: Im Moment sind meine R Skripte direkt unter meinem Hauptjava Projektordner. Für den Zugriff auf einen R Skript, ich erstelle RConnection und verwenden Sie dann den folgenden Code:R Verbindungsprobleme mit relativen Pfad und ausführbare jar

RConnection rc1 = new RConnection(); 
rc1.assign("parseFile", currentPath.concat("/parseFile.R")); 
rc1.eval("source(parseFile)"); 

Die currentPath Variable im Code ist der absolute Pfad, den ich diese obtain mit:

final String currentPath = currentRelativePath.toAbsolutePath().toString(); 

jedoch Ich möchte Änderungen an meinem Code vornehmen und möchte mit einem relativen Pfad auf meine R Skripts zugreifen. Dazu habe ich im Ordner src einen Ordner mit dem Namen rscripts angelegt und meine R Skripte in diesen Ordner gelegt. Ich markierte dieses Verzeichnis dann als Sources root unter Verwendung der Mark directory as Option in IntelliJ. Um die Skripte zu Zugriff habe ich die folgenden Änderungen an dem Code:

rc1.assign("parseFile", "/rscripts/parseFile.R"); 
rc1.eval("source(parseFile)"); 

aber jetzt habe ich den Fehler:

org.rosuda.REngine.Rserve.RserveException: eval failed, request status: error code: 127 

am error Suche, es scheint, dass R Skript kann nicht zugegriffen werden. Wie sollte ich relative Pfade verwenden, um auf die R Skripte zuzugreifen?

Zweitens möchte ich meine Anwendung als JAR-Datei liefern. Sollte ich auch R mit der Datei jar bündeln, falls der Benutzer R nicht auf dem System installiert hat?

+0

Beginnen mit einem Schrägstrich bedeutet absoluter Pfad. Ich würde nur den Inhalt der Datei lesen, um in Java zu stringeln und eval zu sehen, dass es so aussieht, als würden wenige Dinge schief gehen –

Antwort

0

Meine Vermutung ist, dass Sie Ihr R-Arbeitsverzeichnis mithilfe von setwd() an den richtigen Speicherort ändern sollten. Danach können Sie nur den Dateinamen an die Funktion source() übergeben.