rJava:从 R 创建零长度 Java 数组
rJava: Creating zero-length Java arrays from R
我正在寻找 rJava 相当于:
String[] s;
s= new String[0];
我试过了:
library(rJava)
.jinit()
s=.jarray(list(NULL), "[Ljava/lang/String;")
但是当将它传递给一个需要 String[]
和 jcall(..., s)
的方法时,rJava 会引发错误。
更新
为了让我的问题更清楚。
当然,我可以轻松地制作一个新的 jar(或修改现有的)来托管一些 zeroArray()
稍后从 R 调用的方法,但我正在寻找一个解决方案 基于 rJava,这意味着使用标准 Java 对象或 rJava 或内部 rJava 函数提供的 jar 文件中的 类。
如果我有这样的东西:
package utils;
public class RUsingStringArray {
public void useArray(String [] array) {
for(int i=0; i<array.length; i++ ) {
String str = array[i];
}
}
public int arrayLen(String [] array) {
System.out.println("Class: " + array.getClass());
return array.length;
}
public String [] createArray() {
return new String[0];
}
public static void main(String [] arg) {
RUsingStringArray obj = new RUsingStringArray();
obj.useArray(obj.createArray());
System.out.println("Len: " + obj.arrayLen(new String[0]) );
}
}
方法,createArray会return
> obj <- .jnew("utils.RUsingStringArray")
> s <- .jcall(obj, returnSig="[Ljava/lang/String;", method="createArray")
> s
character(0)
稍后您可以将其用作空字符串[]
.jcall(obj, returnSig="V", method = "useArray", s)
当然,这个也行
> b <- character(0)
> .jcall(obj, returnSig="V", method = "useArray", b)
问题是,这是否是您正在寻找的东西。
更新:
在那种情况下,也许这对你来说更好?
> array <- .jarray(list(NULL), "java/lang/String")
> .jcall(obj, returnSig="V", method="useArray", array)
更新2:
这个怎么样;)
> array2 <- .jarray(character(0), "java/lang/String")
> .jcall(obj, returnSig="I", method="arrayLen", array2)
Class: class [Ljava.lang.String;
[1] 0
>
我正在寻找 rJava 相当于:
String[] s;
s= new String[0];
我试过了:
library(rJava)
.jinit()
s=.jarray(list(NULL), "[Ljava/lang/String;")
但是当将它传递给一个需要 String[]
和 jcall(..., s)
的方法时,rJava 会引发错误。
更新
为了让我的问题更清楚。
当然,我可以轻松地制作一个新的 jar(或修改现有的)来托管一些 zeroArray()
稍后从 R 调用的方法,但我正在寻找一个解决方案 基于 rJava,这意味着使用标准 Java 对象或 rJava 或内部 rJava 函数提供的 jar 文件中的 类。
如果我有这样的东西:
package utils;
public class RUsingStringArray {
public void useArray(String [] array) {
for(int i=0; i<array.length; i++ ) {
String str = array[i];
}
}
public int arrayLen(String [] array) {
System.out.println("Class: " + array.getClass());
return array.length;
}
public String [] createArray() {
return new String[0];
}
public static void main(String [] arg) {
RUsingStringArray obj = new RUsingStringArray();
obj.useArray(obj.createArray());
System.out.println("Len: " + obj.arrayLen(new String[0]) );
}
}
方法,createArray会return
> obj <- .jnew("utils.RUsingStringArray")
> s <- .jcall(obj, returnSig="[Ljava/lang/String;", method="createArray")
> s
character(0)
稍后您可以将其用作空字符串[]
.jcall(obj, returnSig="V", method = "useArray", s)
当然,这个也行
> b <- character(0)
> .jcall(obj, returnSig="V", method = "useArray", b)
问题是,这是否是您正在寻找的东西。
更新:
在那种情况下,也许这对你来说更好?
> array <- .jarray(list(NULL), "java/lang/String")
> .jcall(obj, returnSig="V", method="useArray", array)
更新2:
这个怎么样;)
> array2 <- .jarray(character(0), "java/lang/String")
> .jcall(obj, returnSig="I", method="arrayLen", array2)
Class: class [Ljava.lang.String;
[1] 0
>