网站首页 > java教程 正文
南昌青鸟程序员教你如何使用rJava R包来做更多
在“ R使用Java入门 ”中,您学习了如何初始化JVM以使用Java with R,设置类路径,并调用您创建的Java对象。在“ 使用Java字符串和R中的Swing API”中,您学习了使用字符串,创建Java Swing应用程序,以及查找对象是否是类的实例。在本教程中,我们将讨论使用rJava R包来处理异常,数组,集合,转换和比较Java对象,以及获取系统属性。本教程包含以下部分。
检查和清除例外
如前所述,.jnew(class,...,check = TRUE,silent =!check)函数通过将检查 arg 设置为TRUE(默认值)来检查异常。因为默认情况下“静默”参数是!检查,如果存在错误,将输出错误消息。例如,从不存在的类hello / world中使用check = TRUE创建一个新的Java对象。
> v < - .jnew(“hello / world”,check = TRUE)
以下输出指示错误。
.jnew(“hello / world”,check = TRUE)中的错误:
java.lang.ClassNotFoundException
>
提供以下函数来检查异常和抛出异常。
功能 | 描述 | 用法 |
.jcheck | 检查JVM是否存在任何挂起的异常并清除它们。当check = TRUE时,.jnew函数隐式调用.jcheck函数,这是默认值。 | .jcheck(silent = FALSE) |
.jthrow | 抛出Java异常。在使用中的“异常”是异常对象。 | .jthrow(exception,message = NULL) |
.jgetEx | 轮询任何待处理的异常并返回异常对象(如果有)。 | .jgetEx(clear = FALSE) |
.jclear | 清除挂起的异常。 | .jclear() |
如果.jnew函数调用中check = FALSE,则不会生成错误消息,异常不会被清除,并且可能会获取异常对象。例如,使用不存在的类调用.jnew,并且check = FALSE。不生成错误消息。
> if(!is.null(e < - 。jgetEx()))print(“Java exception was raised”)
[1]“Java异常出现”
可以输出异常消息。
>打印(e)
[1]“Java-Object {java.lang.ClassNotFoundException}”
>
该.jcheck函数清除异常,如果连续叫了两次,一个输出FALSE或0表示是一样的。
> print(.jcheck(silent = TRUE))
[1] 1
> print(.jcheck(silent = TRUE))
[1] 0
使用数组
rJava包提供.jarray函数,用于从向量或Java引用列表创建Java数组引用。
.jarray(x,contents.class = NULL,dispatch = FALSE)
该contents.class如果Java的引用的列表被用来创建一个数组,并且指示该Java类用于该阵列中的对象时使用。默认值为java.lang.Object类。
例如,下面创建一个int 1到5的数组。
> a < - .jarray(1:5)
>打印(a
[1]“Java-Array-Object [I:[I @ 27d16a7f]
>
该.jevalArray返回的内容或数组元素。例如,输出数组“a”中的元素。输出int 1至5。
> .jevalArray(a)
[1] 1 2 3 4 5
>
该.jarray返回一个Java数组引用jarrayRef。作为另一个示例,从向量创建数组,使用R函数“c”创建向量。
> b < - .jarray(c(“hello”,“world”))
随后,使用.jevalArray来计算数组以输出数组的元素。
> .jevalArray(b)
[1]“hello”“world”
>
使用收藏集
集合可以像任何其他Java对象一样创建。作为示例,使用J高级API for Java 为java.util.Vector类创建类引用。
> Vector < - J(“java.util.Vector”)
>
使用“new”运算符从类引用中创建一个名为“v”的Java对象引用。
> v < - new(Vector)
向Vector对象添加元素。
> v $ add(“item1”)
[1] TRUE
> v $ add(“item2”)
[1] TRUE
> v $ add(“item3”)
[1] TRUE
>
前面的函数调用的输出显示在R Console中(见图1)。
从前面的函数调用输出,显示在R控制台中
图1:来自前面的函数调用的输出,如R控制台中所示
使用Vector类方法firstElement()打印第一个元素。
> print(v $ firstElement())
[1]“item1”
使用size()方法输出数组的大小。
> print(v $ size())
[1] 3
使用Vector的toArray()方法输出数组的Object引用。
> print(v $ toArray())
[1]“Java-Array-Object [Ljava / lang / Object;
:[Ljava.lang.Object; @ 36ed5ba6“
使用toString()方法将Vector类作为Sting输出。
> print(v $ toString())
[1]“[item1,item2,item3]”
使用lastElement()方法输出Vector引用中的最后一个元素。
> print(v $ lastElement())
[1]“item3”
使用isEmpty()方法查找Vector是否为空。
> print(v $ isEmpty())
[1] FALSE
使用remove()方法删除元素。
> print(v $ remove(“item1”))
[1] TRUE
随后,如果第一元素被打印,则输出“item2”而不是“item1”。
> print(v $ firstElement())
[1]“item2”
使用Vector类中的removeAllElements()方法删除所有元素。
> print(v $ removeAllElements())
空值
随后,查找Vector对象是否为空,并返回TRUE。
> print(v $ isEmpty())
[1] TRUE
>
作为集合另一个例子创建类型的对象“H” 的java.util.HashMap。
> h < - new(J(“java.util.HashMap”))
在HashMap中放入几个键/值对。
> h $ put(“1”,“hello”)
> h $ put(“2”,“world”)
> h $ put(“3”,new(J(“java.lang.Double”),“10.2”))
使用size()方法打印HashMap对象的大小。
> print(h $ size())
[1] 3
输出的值HashMap中使用的值()的方法HashMap中。
> print(h $ values())
[1]“Java-Object {[10.2,world,hello]}”
使用get()方法获取键的值。
> print(h $ get(“1”))
[1]“hello”
>
强制转换Java对象
该.jcast功能蒙上了Java对象到另一个类,并具有以下用法。
.jcast(obj,new.class =“java / lang / Object”,
check = FALSE,convert.array = FALSE)
“obj”是要转换的Java对象,类是要转换的类。如果check = TRUE,则使用.jinstanceof函数执行检查,以验证对象是类的实例。如果check = FALSE,这是默认值,则不执行检查,如果对象不是类的实例,则会生成错误。该convert.array = FALSE不数组对象转换为jarrayRef参考。例如,创建一个名为“v”的Vector类对象。
> v < - .jnew(“java / util / Vector”)
使用.jcast将对象转换为类java / lang / Object。
> .jcast(v,new.class =“java / lang / Object”,
check = TRUE,convert.array = FALSE)
[1]“Java-Object {[]}”
上述函数调用的输出显示在R Console中,如图2所示。
从前面的函数调用输出,显示在R控制台中
图2:来自上述函数调用的输出,如R控制台中所示
获取系统属性
可以使用.jcall函数输出系统属性,方法是提供系统属性以获取作为java / lang / System的getProperty方法的arg ,并将值作为String返回。
> .jcall(“java / lang / System”,“S”,“getProperty”,
“os.name”)
[1]“Windows 7”
> .jcall(“java / lang / System”,“S”,“getProperty”,
“file.separator”)
[1]“\\”
> .jcall(“java / lang / System”,“S”,“getProperty”,“java.class.path”)
[1]“C:/ Users / Deepak Vohra / Documents / R / win-library / 3.3 / rJava /
java / boot; C:\\ OracleNoSQLDatabase \\ kv-client-3.0.5 \\ kv-3.0.5 \\
lib \\ kvclient.jar; C:\\“
> .jcall(“java / lang / System”,“S”,“getProperty”,“java.home”)
[1]“C:\\ Program Files \\ Java \\ jdk1.7.0_55 \\ jre”
> .jcall(“java / lang / System”,“S”,“getProperty”,“java.vendor”)
[1]“Oracle公司”
> .jcall(“java / lang / System”,“S”,“getProperty”,“java.version”)
[1]“1.7.0_55”
> .jcall(“java / lang / System”,“S”,“getProperty”,“line.separator”)
[1]“\ r \ n”
> .jcall(“java / lang / System”,“S”,“getProperty”,“os.arch”)
[1]“amd64”
> .jcall(“java / lang / System”,“S”,“getProperty”,“path.separator”)
[1]“;
> .jcall(“java / lang / System”,“S”,“getProperty”,“user.dir”)
[1]“C:\\ Users \\ Deepak Vohra \\ Documents”
>
比较Java引用
可以通过使用二进制比较运算符比如==,<,>,<=或> =来比较Java引用。例如,创建三个类型为Double的对象,其中两个对象将来自相同的双值10.0和一个来自双5.0。
> Double < - J(“java.lang.Double”)
> d1 < - new(Double,10.0)
> d2 < - new(Double,10.0)
> d3 < - new(Double,5.0)
>
使用==二元运算符查找d1是否等于d2 。
> d1 == d2
输出如下。
[1] TRUE
比较,如果D1小于D2与<。
> d1 <d2
输出如下。
[1] FALSE
将d1和d3与<=进行比较。
> d1 <= d3
输出如下。
[1] FALSE
将d1和d3与> =进行比较。
> d1> = d3
输出如下。
[1] TRUE
查找d1是否小于d2,其中<。
> d1> d2
输出如下。
[1] FALSE
>
总结
在这个三部分教程中,我们讨论了使用Java中的Java。我们讨论了大多数Java功能,例如创建Java对象,调用Java方法,使用Strings,创建Swing应用程序,查找Object是否是类,检查异常,使用数组,使用集合,转换Java对象,获取系统属性,以及比较Java引用以及初始化JVM和设置类路径。
猜你喜欢
- 2024-10-20 使用idea将Java项目打成Jar包,之后生成exe可执行文件
- 2024-10-20 Java并发包,你需要掌握的atomic(java并发实现原理)
- 2024-10-20 一款易于使用的Java验证码软件包(javaee验证码)
- 2024-10-20 Java 覆盖 jar 包内的方法(java覆盖第三方jar中类文件)
- 2024-10-20 都说Java程序占内存多,那么Java对象究竟占多少内存?
- 2024-10-20 JAVA学习笔记之导包(java中的导包命令是哪个)
- 2024-10-20 简单介绍Java 的JAR包、EAR包、WAR包区别
- 2024-10-20 Java juc包学习笔记(java的juc包)
- 2024-10-20 Java带包结构调用命令行运行编译(java怎么使用包)
- 2024-10-20 Java并发包-atomic包-让您彻底掌握AtomicInteger源码
你 发表评论:
欢迎- 07-21如何将 iPhone 中的联系人导出到 Excel/CSV?
- 07-21sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 07-21在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 07-21如何把csv格式转换成Excel格式(csv格式怎么转换)
- 07-21如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 07-21使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 07-21解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 07-21使用vba将Excel 文件转成 CSV 文件
- 最近发表
-
- 如何将 iPhone 中的联系人导出到 Excel/CSV?
- sql查询的字段数据中有逗号。放到csv文件会分开,如何解决?
- 在 WebAPI 里生成 csv zip 文件(webapi怎么发布在iis上)
- 如何把csv格式转换成Excel格式(csv格式怎么转换)
- 如何将高程导出为XYZ或CSV高程点(如何将高程数据导入cad)
- 使用python把csv汇总成excel(python怎么将csv文件中的列存入列表)
- 解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 使用vba将Excel 文件转成 CSV 文件
- python爬虫25 | 爬取的数据怎么保存?CSV了解一下
- MySQL 导出数据(mysql 导出数据 判断成功)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)