ITPub博客

首页 > > > R语言直接调用Java代码

R语言直接调用Java代码

作者:浪花小雨滴 时间:2020-06-16 16:11:00 0 删除 编辑
作者:王亨 公众号:跟着菜鸟一起学R语言 (微信ID:learn_R)
配套教程:初级入门篇:R语言快速入门免费视频教程 edu.hellobi.com/course/

我们都知道Java语言长期处于霸主地位,在所有编程语言排行榜中,Java也是常年位居第一。在近几年也是爆炸式发展,几乎覆盖到了应用开发的所有领域。而R语言则在统计圈和数据可视化处于佼佼者,如果将Java的通用性和R的专业性紧密结合起来,就可以碰撞出不一样的火花。

在之前两篇文章中我已经写了如何在Java程序中调用R代码,


想必很多人都知道rjava包是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许R直接调用java对象的方法。可今天我就一个简单的函数system()来实现在R语言直接调用Java程序。

下面这个Java程序是用来计算斐波拉契数列的,我已经赋初值为5,

public class NoParameter {

	public void printFibo(int n){
		for(int i=1;i<=n;i++){
			System.out.println(f(i)+" ");
			if (i==0) {
				System.out.println();
			}
		}	
	}
	long f(long n){
		if (n==1||n==2) {
			return 1;
		} else {
			return f(n-1)+f(n-2);
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new NoParameter().printFibo(5);
	}

}

运行结果如下:



在R语言中,我们只需要用两句话就可以调用这个程序:

system("javac NoParameter.java")#生成.class文件
system("java NoParameter")#执行NoParameter文件

运行结果如下:

下面这个Java程序也是用来计算斐波拉契数列的,不过它需要在运行时写入参数,用来告诉程序你需要多少位的数列。

public class Parameter {

	public void printFibo(int n){
		for(int i=1;i<=n;i++){
			System.out.println(f(i)+" ");
			if (i==0) {
				System.out.println();
			}
		}	
	}
	long f(long n){
		if (n==1||n==2) {
			return 1;
		} else {
			return f(n-1)+f(n-2);
		}
	}
	public static void main(String[] args) {
        new Parameter().printFibo(Integer.parseInt(args[0]));
	}

}



这个在R语言中也需要两句话就可以运行:

system("javac Parameter.java")
system("java Parameter 6")

运行结果为


这里需要注意的就是Main函数参数String[] args,它是一个字符串数组,用来接收从命令行输入的参数。参数之间用空格隔开,java解释器会自动处理,把用空格隔开的每一个参数通过args数组传递给main方法。参数下标从0开始,args[0]就代表1第一个参数。当然输入参数之间可以有多个空格,中间的多个空格会被忽略掉。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3164307/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39969