Rserve 实现java与R的互通

服务器端:     华为弹性云服务器    服务系统:WindowsServer 2012 64bit   Rserve默认端口:6311

(华为云服务器需要在网络安全组设置入方向规则并指定端口)

java项目所用jar包    REngine.jar    RserveEngine.jar   Rserve.jar

一、下载安装R

https://www.r-project.org/

Windows安装:注意,3.40版安装包有问题

https://cran.r-project.org/bin/windows/base/rpatched.html

二、设置系统环境变量

1、  下载安装以后,设置R相关的环境变量,本机安装(D:\R\R-3.3.2)

R_HOME   值为:D:\R\R-3.3.2

path  末尾添加 D:\R\R-3.3.2\bin;

配置完成后运行CMD  输入   R   出现如下则R环境配置成功

三、安装并载入Rserve

在R中运行

1
2
3
>install.packages("Rserve")
>library(Rserve)

四、启动Rserve服务 
将Rserve安装目录D:\R\R-3.3.2\library\Rserve\libs\x64下三个文件拷到D:\R\R-3.3.2\bin\x64下

方法1、在R中启动Rserve  直接使用Rserve()函数。

1
2
3
4
5
6
7
>library(Rserve)
>Rserve()
Starting Rserve..
"D:\R\R-3.3.2\library\Rserve\libs\x64\Rserve.exe"

方法2、在“D:\R\R-3.3.2\library\Rserve\libs\x64”目录下运行CMD  输入命令 R CMD Rserve --help  出现下图说明Rserve可以启动

输入R CMD Rserve 成功启动

需要远程连接需要输入 R CMD Rserve --RS-enable-remote

五、Rserve的远程配置

查看Rserve配置

CMD下输入  R CMD Rserve --RS-settings  出现如下图

1
2
3
4
5
6
7
8
9
10
11
12
config file: Rserv.cfg  配置文件名称
working root:  R运行时工作目录 /tmp/Rserv
port: 6311   通信端口
local socket: TCP/IP  TCP/IP协议
authorization: 认证未开启
plain text password: 不允许明文密码
passwords file: 密码文件,未指定
allow I/O: 允许IO操作
allow remote access: 远程访问未开启
control commands: 命令控制未开启
interactive: 允许通信
max.input buffer size: 文件上传限制262mb

新建txt文本 内容如下

1
2
3
4
5
6
7
8
9
10
workdir /tmp/Rserv
remote enable
fileio enable
interactive yes
port 6311
maxinbuf 262144
encoding utf8
control enable
source start.R
plaintext enable

另存为名称为Rserv后缀名为.cfg的Rserv   Rserv.cfg

上述信息包含了一个start.R脚本。新建R脚本输入

1
2
cat("This is my Rserve!!")
print(paste("Server start at",Sys.time()))

保存并将文件放到该目录下(此脚本用于提示Rserve启动成功)

建立java工程 导入三个jar包添加到构建路径

DEMO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.shengtian.test;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
public class TestRserve {
    public static void main(String[] args) {
        try
        {
            TestRserve tr = new TestRserve();
            tr.callRserve();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
     
    public void callRserve() throws RserveException,REXPMismatchException
    {
        RConnection rcon = new RConnection("114.115.205.210");    //建立远程链接
        String rv = rcon.eval("R.version.string").asString();     //得到R版本信息
        double[] arr = rcon.eval("rnorm(10)").asDoubles();        //通过R得到10个随机数返回数组
        System.out.println(rv);                                   //输出版本信息
        for(double x:arr)                                         //遍历集合
        {
            System.out.println(x);
        }
    }
}

运行结果:

标签: java

Rserve 实现java与R的互通相关推荐

  1. JAVA调用R语言之Rserve(二)

    之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...

  2. JAVA调用R语言之Rserve

    为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂 ...

  3. java矩阵传递给r_从JAVA调用R得到卡方统计和p值

    我在JAVA中有两个4 * 4矩阵,其中一个矩阵包含观察计数和其他预期计数. 我需要一种自动的方法来计算这两个矩阵之间的卡方统计量的p值; 但是,就我所知,JAVA没有这样的功能. 我可以通过将两个矩 ...

  4. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合

    前言 为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进 ...

  5. java调用R 画词云

    一直想找个java包画词云,但是网上并没有什么现成方案.在github上用关键词wordcloud搜一下,发现用java开发的没有比较好的开源项目(获得星星都很少,最多也就个位数).但是又想在java ...

  6. JAVA调用R语言 (未完)

    R语言中起服务 > library(Rserve) > Rserve() 在java中调用 public static void main(String[] args) {try {Sys ...

  7. java集成r语言_R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一.实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调用 ...

  8. Java调用R脚本的方法总结

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

  9. Java、R、JS 最常用,架构师薪资最高!起底中国开发者现状

    想了解基础的中国软件开发者用户画像吗?想了解一线城市开发者的薪酬吗?想了解大多数开发者偏爱的编程语言吗?想了解高薪开发者从事的都是什么岗位吗?想了解最新的业界技术趋势吗?......本文带你一探究竟. ...

最新文章

  1. SpringBoot集成FreeMarker
  2. Ubuntu使用实录
  3. 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException
  4. 【指标导出】指标原始数据导出流程
  5. TCP的粘包和拆包及Netty中的解决方案
  6. windows11图文安装流程
  7. Android 插件化原理解析——Hook机制之AMSPMS
  8. 美元汇率pascal程序
  9. 五个 .NET 性能小贴士
  10. CSS中的text-shadow。
  11. Magento 自定义后台menu Insert dynamical menu in Magento’s Admin
  12. Autoware(2)—加载地图数据
  13. java组合与继承始示例_Java示例中的组合
  14. Q104:怎么用ray tracing画基于磨边楔形的“花环(Rosette)”
  15. oracle 如何使用循环语句,Oracle条件语句跟循环语句
  16. 全球知名企业高管预测2019人工智能趋势
  17. POI 导出Excel文件 设置指定列格式为文本格式
  18. 阿米洛键盘取消win_阿米洛键盘驱动|阿米洛樱花键盘驱动下载v1.0官方版 - 欧普软件下载...
  19. 调出软键盘 挤掉标题栏咋办
  20. pscs6安装序列号

热门文章

  1. linux 编程之库的使用(学习笔记)
  2. leetcode327 超时大坑
  3. if not exist Oracle,oracle 兑现 if not exist 方法
  4. move语句java_Oracle中的move命令
  5. 赵立新主持机器人_《档案》第二任主持人赵立新:我是石凉接班人
  6. 低代码可视化报表开源工具,只要在线拖拽就能做出复杂数据报表
  7. 为什么索引可以让查询变快,你有思考过吗?
  8. 分页场景(limit, offset)为什么会慢?
  9. 因未发项目奖金,一名程序员决定删代码泄愤
  10. Mybatis是如何实现SQL语句复用功能的?