首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rJava加载数据

使用rJava加载数据
EN

Stack Overflow用户
提问于 2016-03-31 15:15:00
回答 1查看 368关注 0票数 1

我使用rJava在我的项目中集成了Java和R。

我需要在我的应用程序中加载GWmodel R包,并计算与Java的距离矩阵。

这是我的函数,用于加载GWmodel并计算距离矩阵:

代码语言:javascript
复制
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();

但是代码会导致一个错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
    at rjavaexm.RJavaExm.main(RJavaExm.java:30)

所以,我想知道,是否有可能像上面的代码那样使用rJava从Java加载R包和数据?

或者有什么合适的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 16:09:17

我使用的是maven,所以我有以下内容(从一个简单的maven项目中生成)

代码语言:javascript
复制
mvn archetype:generate   -DgroupId=com.test.rserve  -DartifactId=com.test.rserve

选择默认选择。

pom.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
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();
    }
}

确保您的R环境中安装了package。

来自R

代码语言:javascript
复制
library(Rserve)
Rserve()

带有maven的(命令行,另一个shell)

代码语言:javascript
复制
mvn exec:java -Dexec.mainClass="com.test.rserve.App"

我们用我的设置:

代码语言:javascript
复制
R version 3.2.4 (2016-03-16)
316

以后别忘了关闭Rserve服务器/进程.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36337377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档