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. Libgdx 开发指南(1.1) 应用框架——生命周期

    生命周期 Libgdx应用有一个定义好的生命周期,控制着整个应用的状态,例如creation, pausing, resuming, disposing ApplicationListener 开发者 ...

  2. Maven工程中的右键team

    与资源库同步(S):在需要合并版本时使用 提交(C):本地代码写入源码库 更新(U):本地代码升级到服务器端版本 在点击更新时,请注意: 如果当前项目有改动(甚至是比原来多了一个空格),则此时无法更新 ...

  3. 学习笔记:HSB、HSL

    转自知乎:http://www.zhihu.com/question/22077462 HSB 为 色相,饱和度,明度, HSL 为 色相,饱和度,亮度, HSV 为色相,饱和度,明度. HSB 和 ...

  4. tensorflow1

    特征: 1 灵活 2 可移植性 3 和研究/生产联系 4 自动求导 5 语言选择:python,严谨的c++接口:未来扩展更多 6 最大性能化

  5. EasyUI filebox组件在IE下不兼容

    EasyUI 1.4.1 jQuery v1.11.1 EasyUI1.4.1版本的filebox在IE9+环境下,提交表单上传文件时出错,不能使用.

  6. @proprety数组字典字符串用copy和strong区别(深浅拷贝)

    ////  @proprety数组字典字符串用copy和strong区别(深浅拷贝).h//  IOS笔记//// /* _proprety________copy_strong_________h ...

  7. WPF 中保存 window(窗口)或者canvas成图片

    最近需要用到这个功能,搜了一下不少代码有问题 ,找到一个效果比较好的,支持多级子元素 记一下. private void button_save_window_Click(object sender, ...

  8. repeater没有数据显示暂无数据,无记录

    方法就是在FooterTemplate加个Label并根据repeater.Items.Count判断是否有记录.关键代码如下: <FooterTemplate> <asp:Labe ...

  9. CSS 分组

    选择器分组 假设希望 h2 元素和段落都有灰色.为达到这个目的,最容易的做法是使用以下声明: h2, p {color:gray;} 将 h2 和 p 选择器放在规则左边,然后用逗号分隔,就定义了一个 ...

  10. Correlation Filter in Visual Tracking系列二:Fast Visual Tracking via Dense Spatio-Temporal Context Learning 论文笔记

    原文再续,书接一上回.话说上一次我们讲到了Correlation Filter类 tracker的老祖宗MOSSE,那么接下来就让我们看看如何对其进一步地优化改良.这次要谈的论文是我们国内Zhang ...