R和Java的整合
作为统计工具R有着无可比拟的灵活性和社区支持,而在构建系统方面Java的优势也毋庸置疑的,那怎样将二者结合起来取长补短以获得更大的灵活性呢?本文简单介绍通过rJava包来实现R和Java之间的互通。
Calling Java code from R
在R中调用Java基本没有什么大问题,只要安装好rJava包之后,就可以分别通过.jnew
和.jcall
来创建Java类以及调用类方法了。详细可参考文档rJava。
值得记住的几个地方是JNI类型的表示:
- I = integer
- D = double (numeric)
- J = long
- F = float
- V = void
- Z = boolean
- C = char (integer)
- B = byte (raw)
- L<class>; 表示Java中的类<class>,譬如“Ljava/lang/Object;”
- [<type> 表示<type>类型的数组对象,譬如“[D”表示double型的数组
注:由于在R中不存在long或float相应的类型,因此这两种类型都会被转换成numeric类型。如果要向Java中传递这两种类型,则可以使用函数.jlong和.jfloat。
Calling R code from Java
通过JRI接口可以实现在Java中调用R代码(目前该接口是rJava包的一部分)。
将JRI.jar、JRIEngine.jar、REngine.jar添加到Java的CLASSPATH中去。
在
java.library.path
路径下包含libjri.jnilib,否则会报错Cannot find JRI native library!
。另外还需设置环境变量
R_HOME
:如果是在Eclipse下使用,则可以在“Run configure”的Environment标签下添加环境变量“R_HOME”;如果是在脚本中运行,则只需提前export R_HOME
即可。到这里自带的两个示例程序实际上就可以运行了。另外,根据程序的需求可能还需添加其他环境变量如:LD_LIBRARY_PATH、R_SHARE_DIR、R_INCLUDE_DIR、R_DOC_DIR,具体可视情况参照自带的run脚本添加即可。
如何使用可参见自带的rtest.java和rtest2.java。
资料:Javadoc文档
blog comments powered by Disqus