2016-03-31 13 views
1

Ich benutze rJava um Java und R in mein Projekt zu integrieren.Daten laden mit rJava

Ich muss GWmodel R-Paket in meiner Anwendung laden und berechnen Sie die Abstandsmatrix von Java.

Dies ist meine Funktion GWmodel und Berechnung Distanzmatrix zu laden:

Rengine engine = new Rengine(new String[] { "--no-save" }, false, null); 
engine.eval("library(GWmodel)"); 
engine.eval("data(LondonHP)"); 
engine.eval("DM <- gw.dist(dp.locat=coordinates(londonhp))"); 
double[][] matrix = engine.eval("DM").asMatrix(); 

Aber das Codeergebnis ein Fehler:

Exception in thread "main" java.lang.NullPointerException 
    at rjavaexm.RJavaExm.main(RJavaExm.java:30) 

Also, ich möchte wissen, ist es möglich, R zu laden Paket und Daten mit rJava von Java wie Code oben?

Oder gibt es geeignete Möglichkeiten, das zu tun?

Antwort

1

Ich verwende Maven, so habe ich die folgende (erzeugt aus einem einfachen Maven Projekt)

mvn archetype:generate -DgroupId=com.test.rserve -DartifactId=com.test.rserve 

Wählen Standardauswahl.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test.rserve</groupId> 
    <artifactId>com.test.rserve</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>com.test.rserve</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
    <groupId>org.rosuda.REngine</groupId> 
    <artifactId>Rserve</artifactId> 
    <version>1.8.1</version> 
    </dependency>  
    </dependencies> 
</project> 

App.java

package com.test.rserve; 

import org.rosuda.REngine.REXP; 
import org.rosuda.REngine.REXPMismatchException; 
import org.rosuda.REngine.Rserve.RConnection; 
import org.rosuda.REngine.Rserve.RserveException; 


public class App { 

    public static void main(String[] args) throws RserveException, 
      REXPMismatchException { 
     RConnection c = new RConnection(); 
     REXP x = c.eval("R.version.string"); 
     System.out.println(x.asString()); 
    c.eval("library(GWmodel)"); 
    c.eval("data(LondonHP)"); 
    c.eval("DM <- gw.dist(dp.locat=coordinates(londonhp))"); 
    REXP y = c.eval("dim(DM)[1]"); 
    System.out.println(y.asString()); 
    c.close(); 
    } 
} 

Stellen Sie sicher, dass Paket rserve in Ihrem R-Umgebung installiert.

von R

library(Rserve) 
Rserve() 

mit Maven (Kommandozeile, eine andere Shell)

mvn exec:java -Dexec.mainClass="com.test.rserve.App" 

Wir mit meinen Einstellungen erhalten:

R version 3.2.4 (2016-03-16) 
316 

Nicht vergessen um den Rserve zu schließen ver/process hinterher ...