计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc

上传人:hs****ma 文档编号:543324245 上传时间:2023-02-17 格式:DOC 页数:14 大小:292.50KB
返回 下载 相关 举报
计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc_第1页
第1页 / 共14页
计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc_第2页
第2页 / 共14页
计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc_第3页
第3页 / 共14页
计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc_第4页
第4页 / 共14页
计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc》由会员分享,可在线阅读,更多相关《计算机科学与技术毕业论文文献翻译-R-Java和Object-C之间桥连接方法.doc(14页珍藏版)》请在金锄头文库上搜索。

1、单位代码 01 学 号 100301019 分 类 号 TP312 密 级 文献翻译R,Java和Object C之间桥连接方法 院(系)名称信息工程学院 专业名称计算机科学与技术 学生姓名 指导教师 霞2013年3月6日 黄河科技学院毕业设计(文献翻译) 第13页 英文译文R,Java和Object C之间桥连接方法西蒙,乌尔巴内克R是一个非常流行和通用的统计计算环境(R核心开发团队)。它为许多功不可没的包提供了平台,自己的功能也得到了推广,R为许多领域提供了前沿的工具。R的这种可扩展性从某种程度上让R和本地代码进行通信成为可能。其中一个扩展性手段就是在其他系统和语言中创建接口,这样,在这个

2、系统中就能让R用户进入并对提供的应用程序和库文件进行访问。现在R直接支持Java和Object C这两种系统。他们提供了一个大幅度重复使用已经存在的工具的机会,例如图形用户界面(GUIs),计算库或者通信设备。新增的实用性接口让基于这些接口的广泛用户得以部署工程。首先我们将详细讨论Java接口,在一个简介之后我们将以用户角度举例高亮文本接口。下一个区域我们将逐渐由开发,书写软件包,嵌入到实现细节和当前方法的局限性。最后我们将聚集包开发焦点讨论Object C 接口。首先,对Java 的支持已经在R 2.2.0版已经有介绍,后来在实质上也得到增强。它的目的是让包的开发很容易访问Java功能。这已

3、经通过建立Java虚拟机(JVM)环境和通过提供Java运行时刻位置信息得到解决。这个信息在编译时刻收集,但是可以随后通过任何安装过R的R CMD javareconf命令更新。它通常在Java配置发生改变时起作用,例如,在Java运行时刻版本更新后起作用。有两种方法链接R与Java环境 :l 从一个运行的R中开启一个JVM在这种情形下用户用普通方法使用R(例如:通过命令行和一些GUI),Java通过执行运算或者提供其他一些服务来使用。典型的一个应用都是为java中执行运算包,例如:RWeka(Hornik et al 2007),提供用户接口元素,例如:iPlots(Urbanek 和 Th

4、eus 2003)或者跨平台访问资源,例如:RJDBC(RJDBC)。l 从Java应用程序中嵌入R这里R被作为这个应用程序的一个线程运行,这样R就能向程序提供它的服务。一个典型的应用R GUIs, 例如:JGR(JGR)或者程序通过R来计算,例如:Mondrian(Theus 2002)或者myJavaStat(Harner et al. 2007)。这个普遍的差别同样适用于Object C:基于线程的服务可以通过R中实例化R中的Object C类来使用,反之,Mac OS X 中R GUI嵌入了一个基于运行时刻环境的Object C(Cocoa)。接下来我们将集中于第一个部分,一个R用户想

5、在他们的包和功能中连接Java功能的最令人感兴趣的部分。尽管R通过设置环境提供基本的Java支撑,但是实际的接口是通过包提供。其中一个有效的包就是CRAN的rJava。它提供了一个非常快速的低水平的能和R中的.C,.Call或.Fortran相比拟的接口。让我们在演示怎么写一个基于Java的包中去连接它的设备和往更深层次详细介绍。具体实现前先用一些简单的例子上阐述它的用法。想要使用Java接口功能,开启JVM和加载rJava包是必需的。这是通过.jinit 函数提供一些与JVM初始化有关的可选参数。这样,一个简单的JVM初始化就可以如下操作: library(rJava) .jinit()一旦

6、JVM初始化成功,我们可以创建新的Java对象或者调用Java方法。让我们开始一个简单的例子吧: s s1 Java-ObjectHello World! class(s)1 “jobRef”使用.jnew 函数我们创建了一个新的Java对象,也就是一个内容为“Hello World!”的字符串这段代码与Java代码s= new Java.lang.String(“Hello World !”)相符合.我们返回的是通过jobRef(Java对象参照)表示的S4类的一个参照。由于S是一个Java对象我们可以调用方法和访问这个对象的域。让我们来调用length方法,如同Java中的S.length

7、(): .jcall(s,”I”,”length”)112 s$length112这个.jcall接口运行在一个非常低的水平,这样它就不仅要求我们提供方法名字(“length”)而且还要提供一个返回类型(整型“Int”)。返回类型.jcall中使用的返回类型的列表在表1中已经列出。第二种是一个用反射来决定返回类型,并以牺牲速度的方式方便性操作符$来实现调用。在内部,它使用了一些低水平的.jcall接口来实现必需的反射查询。一些速度要求高的包推荐.jcall的使用。$通常被保留在交互式的情况使用。一个外部接口的一个重要功能就是能够提供从一种语言向另一种语言的类型转换。在上个例子中我们用java.

8、lang.String类的构造方法接受另外一个字符串引用作为参数。现在,我们改为通过一个R字符载体“Hello World!”解决问题。.jnew函数自动转换字符载体到一个作为构造方法的引用的Java字符串里面。这种自动转换在R中的大部分载体类型都会执行。下面阐述的例子的返回值也是一样: .jcall(s,”s”,”split”,” “)1 “Hello” “world!”split方法是一个String类对象的Java数组,但是它会自动转换到字符下载。rJava提供了为寄存定制的那些能够转换任意R对象到Java对象转换器函数的设备,反之亦然。当调用Java方法时,牢记我们正在处理一个低水平的

9、接口是很重要的。与.C接口相似,我们必须确保那些需要参数类型一致的地方,.jcall中要去确保有相匹配的参数和类。有时候这就意味着我们必须抛出一个对象去使用.jcall到其父类,因为一个准确的匹配是期望出现的,如下:f - .jnew(java.awt.Frame) # f = new Frame()b - .jnew(java.awt.Button,OK) # b = new Button(OK).jcall(f, Ljava.awt.Component;, add, # f.add(b).jcast(b, java.awt.Component) #.jcall(f,pack) # f.pa

10、ck().jcall(f,show) # f.show()在调用add方法时,我们必须将b转换为java.awt.Component类,因为这是add方法要求的。用.jmethod可以列出所支持的方法和它们的参数类型,例如:.jmethod(f,”add”)。另外一个可能存在的缺陷,事实上,R不能区别矢量长度和标量值。默认的rJava接口假设一个矢量长对应一个标量类型,如.:jcall(o,”foo”,1.5),意思是应该存在一个Java方法:void foo(double d)。当一个方法接收到一个数组时,用.jarray函数将参数准确的转换到数组是很有必要的。当一列的引用转换到Java数组

11、对象时它也可以与Java引用一起使用。反过来,转换数组到载体或者对象列表的就是.jevalArray了。rJava也提供了检索和为Java对象域设置值的设备。$操作符提供了一个双重的服务,如果一个域名匹配,它就会用于访问域,否则它就用于引用一个方法。假设我们有一个定义为class Apublic String s;的类。然后给这个类一个实例对象a。我们可以用a$s检索这个域的值,也可以设置值 a$s - “hello”。使用.jfield函数可以对结果有更多的控制。Java中的R包通常包含Java代码和R代码的连接。尽管通过R包构建过程能够编译Java代码,但是Java Development

12、 Kit(JDK)通常就不要求这样做了,这样将源代码和编译过的类打包到Java 文档(jar)是很有实用性的。所有操作必需的文档包必须移动到java 子目录包中,这样,它们能够自动与JVM一块加载。为了初始化JVM,包需要调用.onload或者.First.lib中的.jpackage函数。一个典型的用法就是将rJava增加到Depends中:初始化Java和注释语句如下:.onLoad - function (libname, pkgname) .jpackage(pkgname)#java接口可能从现在开始使用这里注意.jinit不应在这个例子中使用,因为Java类的加载和JVM的初始化是

13、通过.jpackage自动处理的。这样也可以保证多个包可以公平合作。包可以随意依赖其他基于Java的包。这个机制确保了它们通信的类在一个正确的顺序下有效运行,这样包可以互相依赖各自的类在它们需要的情况下。rJava是一个基本的R包,它是植入R到Java应用程序中的基本工具。rJava的这部分通常叫JRI(java/R Interface),并且可以在rJava包的jri子目录中找到。它组成了一个java类的集合,构建了用于访问在Java内大部分R的接口。JRI使用Java Native Interfaca去连接R分享库,这样就可以直接在一个运行中的Java应用程序中植入R。JRI接口的核心是一

14、个在R中提供直接反射C API的REngine类,里面包含丰富的高水平的函数。R对象表现形式为REXP类,它也提供了把R值转换为Java原生类型的访问器方法。植入的R不仅可以在专有的模式中使用,而且可以在利用解析器和鉴别器的大部分或者整个环回时间中使用,这样就提供了用于控制台处理的的Java回调函数。在与由JavaGD包提供的Java图形设备结合中,将所有的R用户通信映射到Java中是很有必要的。这个功能被用于R的Java GUI。能让图形用户接口能彻底在Java中写。在使用rJava调用Java本地接口和R的C API过程中,rJava包就像介于R和Java中间的一层膜而被使用。Java的主要目的就是实现真正的跨平台,高效易于安装。通过微化Java的本地JNI层,不仅增加了Java的可维护性,而且增强了其简易安装特性和自动探测功能。这让rJava区别于像Omegahat工程中复杂的RSJava处理功能。这样rJava不仅可以创造性地在多个平台上运行(Windows,Mac OS 和许多其他系统),而且在商业(Sun ,IBM)和开源代码平台(GCJ/GIJ)上也能运行。为了保证适当的内存管理,rJava使用外部指针和终结器来表示Java引用。在一个Java对象进入到R之前,一个全局参数就创建了,一旦在相应的R对象被当做垃圾回收后,这个参数就会被释放掉。这样

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号