java 调用r语言包传参数_Java与R语言的配置,调用

我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的。好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧。

第一步,配置R的环境。

首先,需要下载一个RGUI的东西,这个东西在我的理解上就跟JVM一个样子,我下载的版本是R 3.1.3(顺便说一句,在64位系统下面的32位的RGUI和64位的RGUI都可以使用的,我的电脑系统是64位的)。下载安装完成,我相信用java的朋友都把java的环境给配置好了,这里我就不讲java的配置了。打开系统的环境变量,在CLASSPATH中添加D:\R-3.1.3\library\rJava\jri\;(就是你那个rjava包的路径),然后在path中添加D:\R-3.1.3\bin\x64;D:\R-3.1.3\library\rJava\jri\x64;(我的系统是64位的,32位的把x64换成i386,但是强调一点你在多少位的JVM中运行R就得把R配置成多少位的,这样子配置会省很多的事情),然后配置R_HOME:D:\R-3.1.3(安装的路径)。这样子配置就算是把R的东西给配置好了。

第二步,下载rjava的包。

然后,你需要去下载你对应的rjava包,在RGUI中选程序包,选一个隔你最近的一个城市然后把rjava包下载(有时候下载不起,我在后面可以提供R 3.1.3版本的rjava包,这个包的版本不一样后面在java中一样的不能调用r)。把下载好的rjava包放在R-3.1.3\library下面(解压了的文件夹),OK下载好了,位置也放好了,进入下一步。

第三步,在myeclipse中调用R。

先在rjava包jri中找到3个包,JRI.jar,JRIEngnie.jar和REngine.jar,将这3个包放在自己的java工程中导入进去。然后在R-3.1.3\library\rJava\jri\examples中找到rtest.java和rtest2.java这两个文件,直接复制到自己的java工程中。先说说这两种连接方式有什么不同,rtest.java是直接把R的console引在了我们的java控制台中,而rtest2.java是启动一个R的一个服务,这两种方式各有优势,自己进行选择,我选择的是rtest.java的方式。说说这里会遇到的问题,第一,可能会出现java.library.path的问题,那是因为没有找到那个库,可以在VM中给他指向你的那个库在vm arguments里添加-Djava.library.path=.../.../lib;第二,可能会出现什么不能在32位系统平台中运行64位的 .dll ,出现这个错的时候说明你的配置出问题了,你要去检查你的这个java程序中配置的java是不是64位的,反正就是要把这两个的位数对应起来就行了。遇到最多的问题就是这两个了,然后基本技能跑通这个程序。

第四步,Spring MVC的项目中调用语言

可以说大多数的开发人员最重要的目的就是把这个rjava运用到项目中去。在这个步骤中,我将这个调用的方法写成了一个工具类,但是我遇见了两个大的问题,第一个,因为在项目是在tomcat中发布的,所以tomcat在加载的时候没有找到R的.dll文件,这个问题可以通过System.out.println(System.getProperty("java.library.path"));这句话,找到你用的那个tomcat下面加载文件的目录,将这个jri.dll放进去,重新运行这个就行了。第二个,是我在写工具类的时候发生的一个错误,我没有考虑到自己会多次使用到这个工具,从而导致我的电脑启动了很多个JVM,内存溢出,死机。这个问题,是通过一个单例模式的建立来解决的,我只让这个Rengine在项目中被实例化一次,这样子,他就只能被启动一次,不会导致电脑死机等等。

第五步,调用R的方法

这里调用的方法是rengine.eval("xxxxx"),xxx就是你写的R语言的代码。OK,介绍完毕。

最后就是我给大家提供的rjava包和R的安装包,http://pan.baidu.com/s/1bnynNfp。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转oracle 11g(42):增加表空间

--查询表空间 select t.tablespace_name, d.file_name, d.autoextensible, d.maxbytes, d.status from dba_tablespaces t, dba_data_files d where t.tablespace_name d.tablespace_name order by tablespace_name.file_name; --增加表空间 AL…

php下载文件添加header响应头

header(Content-type:application/octet-stream);header(Content-Disposition:attachment;filename".basename($file).");header(Content-Length:.filesize($file));readfile($file);转载于:https://www.cnblogs.com/jielin/p/10203140.html

[Leetcode][JAVA][第1111题][栈思想]

【问题描述】 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌…

玩转oracle 11g(43):oracle导出空表

因为11G数据库在CREATE表后数据库不会立刻给该表分配物理存储空间,所以导出数据库的时候自然而然不会导出该表。 解决方案:在导出表服务器上找出所有数据为空的表,批处理的给没有数据行的数据表分配存储空间。 方法1.此为分步骤执行&#x…

分类器交叉验证java_使用交叉验证的KNN分类器

首先,您需要准确定义您的任务 . F.ex给出R ^(MxN)中的图像I,我们希望将I分类为包含面部的图像或没有面部的图像 .我经常使用像素分类器,其任务类似于:对于图像,我决定每个像素是面像素还是非面像素 .定义任务的一个重要…

Python——assert(断言函数)

一、断言函数的作用 python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。 二、常用格式 assert 11  assert 222*…

[Leetcode][JAVA][第20题][Stack][Map]

【问题描述】 20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可…

java学习(137):java异常初识

//java异常初识 public class test78 {public static void main(String[] args) {countArraylength( -1 );}public static int countArraylength(int length) {int[] nums new int[length];return nums.length;} } 运行结果

Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布

我不是焊工import java.util.Scanner;public class Jsb {public static void main(String[] args) {while (true) {result(input(), random());System.out.println("");}}public static int input() {System.out.println("请输入:1-剪刀,…

java学习(138):异常处理

//异常 public class test79 {//定义方法声明定义异常,在满足条件时抛出异常对象,程序转向异常处理public double count(double n,double m)throws Exception {if (m 0) {//如果除数等于0.则抛出异常实例throw new Exception("对不起。除数不能等…

[Java]中[this][super]用法总结

this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本身。 2.形参与成员名字重名&am…

java泛型参数约束_Java泛型方法如何约束方法类型参数?

我一直在阅读有关泛型方法的文章,以为我理解了泛型类型参数如何约束方法参数类型,但是当我用实际代码测试了一些想法时,我得到了意外的结果.这是我不理解的简单通用方法:private static void foo(T[] t1, T[] t2){t2[0] t1[0];}...String[] stringArray new Strin…

Leetcode 950. Reveal Cards In Increasing Order

题目 链接:https://leetcode.com/problems/reveal-cards-in-increasing-order/ Level: Medium Discription: In a deck of cards, every card has a unique integer. You can order the deck in any order you want. Initially, all the cards start face down (un…

java学习(139):多个catch块

import java.sql.Connection;import java.io.IOException; import java.sql.SQLException;//java异常处理 //异常 public class test82 {//定义方法声明定义异常,在满足条件时抛出异常对象,程序转向异常处理public double count(double n, double m, Con…

[Leedcode][JAVA][第289题][生命游戏]

【问题描述】 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。给定一个包含 m n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细…

MySQL报错113_mysql 2003 (113)

1. 问题描述远程访问192.168.2.200主机的mysql数据库时, 出现以下错误:[plain] view plain copy # mysql -host192.168.2.200 -uroot -p Enter password: ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘192.168.2.200‘ (113)2. 解决方法首先确保mysql开启了远程…

MySQL修改表名示例

首先,我们新建一个名为test_table的表: drop table if exists test_table; create table test_table select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_SCHEMAinformation_schema; 然后,我们执行如下语句&#xf…

java学习(140):1.7后新特性

import java.sql.Connection;import java.io.IOException; import java.sql.SQLException;//java异常处理 //异常 public class test82 {//定义方法声明定义异常,在满足条件时抛出异常对象,程序转向异常处理public double count(double n, double m, Con…

[剑指offer]面试题第[67]题[Leetcode][JAVA][第8题] 字符串转换整数 (atoi)[字符串]

【问题描述】 请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将…

java 面板 选择颜色_[代码全屏查看]-java颜色选择器

[1].[代码] [Java]代码package com.liuxing.test;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JColorChooser;import javax.swing.JFrame;import javax.swing.JLabel;impor…