rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法。
步骤:
1.本地系统:
  Win7 64bit 企业版, jdk1.8.0_45,R3.2.2。
 
2.在R中安装rJava:
 下载好R-3.2.2-win.exe,直接打开。输入:  
  > install.packages("rJava") 
  #加载rJava 
  > library(rJava) 
  > .jinit() 
  #R调用Java变量测试 
  > s <- .jnew("java/lang/String", "Hello World!") 
  > s
  [1] "Java-Object{Hello World!}"
 
3.设置系统环境变量:
  R_HOME: C:\Program Files\R\R-3.2.2
  RJAVA_HOME:C:\Program Files\R\R-3.2.2\library\rJava
  PATH:%R_HOME%\bin;%R_HOME%\bin\x64;%RJAVA_HOME%\jri\x64;
 
4.测试代码:
  

import org.rosuda.JRI.Rengine;

/**
* Created by shida.min on 2015/10/27.
*/
public class DemoRJava {
static {
System.loadLibrary("jri");
}
public static void main(String[] args) {
DemoRJava demo = new DemoRJava();
demo.callRJava(args);
}
// -Djava.library.path="C:\Program Files\R\R-3.2.2\library\rJava\jri\x64"
public void callRJava(String[] args) {
System.out.println(System.getProperty("java.library.path"));
Rengine re = new Rengine(args, false, null);
if (!re.waitForR()) {
System.out.println("Cannot load R");
return;
} //打印变量
String version = re.eval("R.version.string").asString();
System.out.println(version); //循环打印数组
double[] arr = re.eval("rnorm(10)").asDoubleArray();
for (double a : arr) {
System.out.print(a + ",");
}
re.end();
} }

在工程中导入JRI.jar, JRIEngine.jar, REngine.jar三个包。

使用 IntelliJ idea 作为 java IDE, 设置VM options:

-Djava.library.path="C:\Program Files\R\R-3.2.2\library\rJava\jri\x64"

首次运行后报错:

java.lang.UnsatisfiedLinkError: C:\Program Files\R\R-3.2.2\library\rJava\jri\x64\jri.dll: Can't find dependent libraries
Disconnected from the target VM, address: '127.0.0.1:49750', transport: 'socket'
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1855)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.xy.DemoRJava.<clinit>(DemoRJava.java:10)
Exception in thread "main"

试了许多办法,都没用,后来在http://stackoverflow.com/questions/19100875/java-r-interface-jri-setup 上找到方法。

把R目录下的所有*.dll文件都拷贝到jdk的bin目录下,并在程序中加上

static {
System.loadLibrary("jri");
}

测试通过,mark。

java 调用 r, Can't find dependent libraries的更多相关文章

  1. Rsession让Java调用R更简单

    Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  2. JAVA 调用 R 语言之升华篇

    由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...

  3. JAVA 调用 R 语言

    1 简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的 ...

  4. Java调用R语言

    R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/ ...

  5. Java 调用R 方法

    JAVA 调用 R 语言 1       简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面, ...

  6. JAVA调用R脚本

    0 前言R是一种非常方便易用的绘图.统计分析.ML算法设计方面的脚本语言.实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型,那 ...

  7. opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can't find dependent libraries

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 使用如上方法加载本地 dll文件. 一般会出现两种错误: 1. UnsatisfiedLinkError ja ...

  8. JAVA调用R

    JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的 ...

  9. Rserve, java调用R源文件

    Rserve安装和加载: install.packages("Rserve") library("Rserve") Rserve()   java调用: REn ...

随机推荐

  1. Unity3D实现摄像机视野的拉远拉近和跟随主角旋转效果

    在Unity官网教程SurvivalShooter(恶魔射手)中,只处理了主角跟随鼠标旋转,摄像机视野并没有旋转或通过滚轮实现视野的拉远拉近,一下是我的实现方法.   在教程中,主角的移动是通过    ...

  2. HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)

    题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...

  3. WPF学习笔记——认识XAML

    Extensible Application Markup Language,XAML是一种声明性标记语言. 一.XAML语法概述 1,与XML类似,用尖括号标记元素 <StackPanel&g ...

  4. <转>两个蛋蛋的故事

    来自为知笔记(Wiz)

  5. 12-1 mysql的增删改减

    增加数据:insert into 表名 values('','');insert into 表名(列名) values('');注意:1.如果添加 得数据是字符串,需要加'',其他类型不要加. 2.添 ...

  6. Linux线程-pthread_kill

    该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...

  7. YHMMR003 农户基本信息的维护程序

    *********************************************************************** * Title : * * Application : ...

  8. hdu1018

    可以用斯特林公式直接求出n!的结果. 当n较小时公式已经很准确了,所以可以使用.但是,对于这种极限值为1的公式,只能用来估计位数,不能作为严格的等于的公式.类似的有素数分布定理  x/ln(x)~f( ...

  9. SVN错误:run 'cleanup' if it was interrupted的解决

    原文转自:http://www.lxway.com/812960411.htm 今天碰到了个郁闷的问题,svn执行clean up命令时报错“Previous operation has not fi ...

  10. mac10.9下eclipse的storm开发环境搭建

    --------------------------------------- 博文作者:迦壹 博客地址:http://idoall.org/home.php?mod=space&uid=1& ...