我正在从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)

最佳答案

您正在调用“ 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的更多文档。

10-06 07:09