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
>