您的位置 首页 java

南昌青鸟程序员教你如何使用rJava R包来做更多

南昌青鸟程序员教你如何使用r java 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和设置类路径。

文章来源:智云一二三科技

文章标题:南昌青鸟程序员教你如何使用rJava R包来做更多

文章地址:https://www.zhihuclub.com/178454.shtml

关于作者: 智云科技

热门文章

网站地图