`

Java调用R(二)

 
阅读更多
    Rsession提供了一种简单的方式,让Java可以访问远程或本地的Rserve实例。Rsession是对Rserve的封装,提供了更高层的API接口,包括Rserve服务器控制,多会话机制,并支持Windows环境。
     另一个R和Java通信的库JRI,并不支持多会话机制。关于R和Java通信的其他文章,请参考:解惑rJava R与Java的高速通道, Rserve与Java的跨平台通信

Rsession项目主页:https://code.google.com/p/rsession/

系统环境

Win7 64bit
R: 3.0.1 x86_64-w64-mingw32/x64 b4bit
发行包下载:解压缩就可以直接使用了

http://rsession.googlecode.com/files/libRsession.zip

包括3个jar包:REngine.jar, Rserve.jar, Rsession.jar

源代码下载:(SVN)

http://rsession.googlecode.com/svn/trunk/Rsession/


具体调用代码如下:

package org.conan.r.rsession;

import java.io.File;
import java.util.Properties;

import org.math.R.RserverConf;
import org.math.R.Rsession;
import org.rosuda.REngine.REXPMismatchException;

public class RsessionDemo {

    public static void main(String args[]) throws REXPMismatchException {
        RserverConf rconf = new RserverConf("192.168.1.201", 6311, "conan", "conan", new Properties());
        Rsession s = Rsession.newInstanceTry(System.out, rconf);

        // 执行R脚本
        double[] rand = s.eval("rnorm(5)").asDoubles();
        System.out.println(rand);

        // 创建一个R对象
        s.set("demo", Math.random());
        s.eval("ls()");

        // 保存R运行时状态到文件
        s.save(new File("./output/save.Rdata"), "demo");

        // 删除R对象demo
        s.rm("demo");
        s.eval("ls()");

        // 从文件加载R环境
        s.load(new File("./output/save.Rdata"));
        s.eval("ls()");
        s.eval("print(demo)");

        // 创建一个data.frame对象
        s.set("df", new double[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }, "x1", "x2", "x3");
        double df$x1_3 = s.eval("df$x1[3]").asDouble();
        System.out.println(df$x1_3);
        s.rm("df");

        // 生成一个图形文件
        s.eval("getwd()");
        s.toJPEG(new File("./output/plot.png"), 400, 400, "plot(rnorm(10))");

        // 以HTML格式输出
        String html = s.asHTML("summary(rnorm(100))"); 
        System.out.println(html);

        // 以文本格式输出
        String txt = s.asString("summary(rnorm(100))");
        System.out.println(txt);

        // 安装新类库
        System.out.println(s.installPackage("sensitivity", true));

        s.end();
    }
}





    对比Rserve的JavaAPI(参考文章:Rserve与Java的跨平台通信),是不是感觉Rsession再友好呢!这样就能在不打开R编译器的情况下,使用R的底层包服务。更适合于封装R。

     我们在使用RStudio时,任务管理器中也可以看到rsession的进程!猜一下,RStudio也在使用rsession做程序接口。




分享到:
评论

相关推荐

    Java调用R语言的方法

    ### Java调用R语言的方法详解 #### JRI (Java/R Interface) **简介:** JRI是一种允许Java程序通过单线程方式与R进行交互的工具。它能够将R的动态库加载到Java环境中,并提供一系列Java API来实现R的功能。JRI支持...

    java调用R语言源码

    Java调用R主要有以下几种方式: 1. **JRI (Java-R Interface)**:这是最直接的方式,通过R的嵌入式运行时环境(REngine)实现。JRI是R的C接口的Java封装,允许Java程序直接调用R函数。使用JRI,你需要在Java代码中...

    Java-调用R语言和调用Python(前后端展示).doc

    Java 调用 R 语言和调用 Python(前后端展示) Java 调用 R 语言 Java 调用 R 语言是为了实现多维度数据的特征选择和数据集协变量偏移(Covariate shift)的纠正功能。R 语言是一种统计编程语言,广泛应用于数据...

    Java调用R语言的实例

    该资源是用Eclipse4.4 + jdk1.6(32位) +R3.2.3(位),开发的一个用Java通过JRI.jar来调用R语言的实例。在运行该代码之前,要在R里安装rJava包,即: install.packags("rJava") 该资料包含JRI.jar,当然,在R里安装完...

    java调用R语言实现数据挖掘

    这两种方式都可以实现Java调用R的功能,但Rserve更适用于网络环境中,因为它提供了一个基于TCP/IP协议的服务端口,使得远程调用成为可能。 1. **使用Java与RServer通信**: - 需要添加相应的Java库到项目中,例如...

    Java通过JRI调用R

    该资源是用Eclipse4.4 + jdk1.6(32位) + R3.2.3(32位)开发的,用Java通过JRI调用R的案例, 先启动R的计算引擎:Rengine Rengine re = new Rengine(new String[]{"--vanilla"},false,null); 然后,调用R里的rnorm()...

    java调用R语言的研究报告.docx

    Java调用R语言是一种常见的跨语言交互方式,特别是在数据分析和机器学习领域,因为R语言提供了丰富的统计和图形处理功能,而Java则具有强大的系统集成和企业应用开发能力。本研究报告探讨了两种主流的方法:通过...

    利用Rserve实现Java调用R脚本.pdf

    整体上,本文通过介绍和比较不同的Java调用R脚本的方法,特别是强调了Rserve远程调用模式的优势,为开发者在需要集成Java与R语言时提供了有力的参考。通过Rserve,开发者可以更容易地将Java应用的强大功能与R语言在...

    一种Java调用Matlab的方法简介.pdf

    首先,要了解Java调用Matlab方法时,Matlab的返回值类型可能会根据函数和Matlab版本的不同而有所差异。例如,在Matlab R2009a环境下,使用`returningFeval`函数调用Matlab函数时,返回的可能是一个`object`数组,...

    Linux环境下实现Java调用Windows环境下的Matlab函数

    ### Linux环境下实现Java调用Windows环境下的Matlab函数 #### 一、所需条件及说明 为了实现在Linux环境中通过Java程序来调用Windows系统下的Matlab函数,首先需要确保满足以下条件: 1. **Windows环境下**: - ...

    java 调用R 和Latex

    里面包含java如果使用R和Latex 生成所需要的文档,里面含有详细的命令,及其调用方式。

    Android Studio3.0开发JNI流程------C++调用Java以及Java调用C++,C++/Java互相调用

    本文将详细讲解在Android Studio 3.0中如何实现C++调用Java以及Java调用C++的过程。 首先,我们需要在Android Studio项目中配置NDK(Native Development Kit),它是Android用于编写和编译C/C++代码的工具集。在...

    android使用webView实现java程序与js脚本的相互调用

    Java调用JavaScript 使用`addJavascriptInterface()`方法暴露一个Java对象给JavaScript环境,这样JavaScript就可以调用这个对象的方法: ```java webView.addJavascriptInterface(new Object() { @...

    java调用PageOffice实例代码

    以上是基于Java调用PageOffice的基本步骤和常见操作。在实际开发中,可以根据需求进行更复杂的组合和扩展,如批量处理文档、生成报表等。PageOffice提供的API非常丰富,能够满足大部分文档处理的需求,是Java开发中...

    利用Rserve实现Java调用R脚本.zip

    本篇将详细探讨如何通过Rserve来实现Java调用R脚本,从而在Java程序中充分利用R语言的功能。 Rserve是一个开源的R语言服务端,它允许远程客户端与R环境进行通信,执行R脚本并获取结果。这使得Java等其他语言能够...

    java使用jco调用rfc案例

    首先,JCO(Java Connector)是SAP提供的一套API,允许Java应用程序与R/3系统进行通信。它提供了对SAP RFC库的访问,让我们能够执行在SAP ABAP层定义的函数模块。RFC是一种标准接口,使得不同系统间可以无痛地交换...

    Java 调用 Shell 命令

    ### Java调用Shell命令知识点详解 #### 一、概述 在特定的应用场景中,比如完成外币资金的调度工作后,可能需要通过Java程序来生成一个文本文件,并进一步利用Shell脚本来实现文件传输等操作。这涉及到Java与操作...

    webview js 和java 之间的调用

    Java调用JavaScript **Java可以通过WebView的`loadUrl()`方法调用JavaScript代码。** - **注入JavaScript代码:** ```java webView.loadUrl("javascript:window.android.callFromNative('Hello Native!')"); ``...

Global site tag (gtag.js) - Google Analytics