通过java中的Vector迭代

时间:2016-10-26 22:36:21

标签: java renjin

我正在从R脚本(使用Renjin库)中检索值,然后尝试在java中操作它们。 R脚本返回一个ListVector,如下所示:

c(1L, 2L, 3L, 4L, 5L...10 elements total)
c(0.70836348202446, 3.27419352963856, 4.08477502998281, 4.11959291310495, 4.64797692435211,... 10 elements total)
c(10.88276411602949, 11.01414766445697, 14.22416580313999, 14.40880862158516, 15.64782262321588,... 10 elements total)

我希望能够从每个Vector中获取特定元素,因此在第一个实验中,我希望能够遍历,以便打印出所有元素。

为此我正在做

ListVector exp = (ListVector) engine.eval(new java.io.FileReader("/Users/sebastianzeki/Desktop/script.R"));
        java.util.Iterator<SEXP> itr = exp.iterator();
        System.out.println("Iterating through Vector elements...");     

                while(itr.hasNext()){
                    java.util.Vector<SEXP> v=new Vector<SEXP>();
                    v.add(itr.next());
                    java.util.Iterator<SEXP> itr2 = v.iterator();

                    while(itr2.hasNext()){
                    System.out.println("My Elements"+itr2.next());
                                         }
                                    }

然而,这只是分别打印出每个向量,以便我最终得到

    My Elementsc(1L, 2L, 3L, 4L, 5L...10 elements total)
    My Elementsc(0.70836348202446, 3.27419352963856, 4.08477502998281, 4.11959291310495, 4.64797692435211,... 10 elements total)
    My Elementsc(10.88276411602949, 11.01414766445697, 14.22416580313999, 14.40880862158516, 15.64782262321588,... 10 elements total)

1 个答案:

答案 0 :(得分:0)

您正在调用“toString()”,它提供调试输出,但通常不会打印向量的全部内容。

您可以通过调用getElementAsObject(i)或键入的访问者getElementAsDouble(i)来访问向量的各个元素:

for(SEXP element in exp) {
  Vector elementVector = (Vector)element; // if you're sure this will be a vector
  for(int i=0;i<elementVector.length();++i) {
     System.out.println("[" + i + "] = " + elementVector.getElementAsDouble(i));
  }
}

您可以在docs.renjin.org

上找到有关此API的更多文档