R的Java接口
2018-09-03
2018-09-03
Rjava
1 rJava介绍
rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法。
rJava还提供了Java调用R的功能,是通过JRI(Java/R Interface)实现的。JRI现在已经被嵌入到rJava的包中,我们也可以单独试用这个功能。现在rJava包,已经成为很多基于Java开发R包的基础功能组件。
正式由于rJava是底层接口,并使用JNI作为接口调用,所以效率非常高。在JRI的方案中,JVM直接通过内存直接加载RVM,调用过程性能几乎无损耗,因此是非常高效连接通道,是R和Java通信的首选开发包。
2 rJava安装
按照普通的软件包按照方式可以将rJava安装到本地。
## install.packages("rJava") # 安装rJava软件包
3 rJava实现R调用Java
library(rJava) # 加载rJava包
search() # 为R对象提供搜索路径
## [1] ".GlobalEnv" "package:rJava" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
.jinit() # 启动JVM
s <- .jnew("java/lang/String", "Hello World!") # 声明并赋值到字符串
s
## [1] "Java-Object{Hello World!}"
.jcall(s,"I","length") # 查看字符串长度
## [1] 12
.jcall(s,"I","indexOf","World") # 索引World的位置
## [1] 6
.jmethods(s,"concat") # 查看concat的方法声明
## [1] "public java.lang.String java.lang.String.concat(java.lang.String)"
.jcall(s,"Ljava/lang/String;","concat",s) #使用concat方法连接字符串
## [1] "Hello World!Hello World!"
print(s) # 打印字符串对象
## [1] "Java-Object{Hello World!}"
.jstrVal(s) # 打印字符串值
## [1] "Hello World!"
rJava优化过的方法调用,用$来调用方法
s$length() # 同.jcall(s,"I","length")
## [1] 12
s$indexOf("World") # 同.jcall(s,"I","indexOf","World")
## [1] 6
4 rJava(JRI)实现Java调用R (win7)
在win7中安装rJava
系统环境:
win7 64bit 旗舰版
R 3.0.1
Java 1.6.0_45
设置环境变量
PATH: C:\Program Files\R\R-3.0.1\bin\x64; D:\toolkit\java\jdk6\bin; D:\toolkit\java\jdk6\jre\bin\server
JAVA_HOME: D:\toolkit\java\jdk6
CLASSPATH: C:\Program Files\R\R-3.0.1\library\rJava\jri
CLASSPATH=D:\proSoftware\R-2.15.0\library\rJava\jri;
PATH=D:\proSoftware\R-2.15.0\bin\i386
R_HOME=D:\proSoftware\R-2.15.0\R-2.15.0\
这里要注意,如果上一步的rjava包不在默认位置,需要把上述环境变量做相应的修改。
将D:\proSoftware\R-2.15.0\library\rJava\jri
下的三个jar包(JRIEngine.jar,JRI.jar,REngine.jar)拷到C:\Program Files\Java\jdk1.6.0_10\lib
目录下,即jdk目录的lib下
打开eclipse,创建java project。同时将上述三个包导入工程中。
D:\proSoftware\R-2.15.0\library\rJava\jri\examples
目录下有两个自带测试代码rtest.java和rtest2.java。运行这两个代码,如果结果不报错,说明调用成功。
运行之前记得run configurations中添加VM参数设置为 -Djava.library.path=D:\proSoftware\R-2.15.0\library\rJava\jri
另外,导入包之后,全部设置完之后如果程序报错,可以重启eclipse,重新尝试。
5 参考文献
[1] java与r互相调用. http://www.mamicode.com/info-detail-1163971.html
[2] java调用r. https://blog.csdn.net/hwssg/article/details/39177959
[3] 解惑 rJava R 与 Java 的高速通道. 张丹. https://cosx.org/2013/08/r-rjava-java .2013-08-14