2016-10-26 68 views
1

我从R脚本(使用Renjin库)检索值,然后尝试在java中操纵它们。将R脚本返回ListVector看起来像:通过Java中的向量遍历

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) 

我希望能够得到来自各载体的具体元素,因此在第一个实验中,我想能够通过遍历这样我就可以打印出所有的元素。

要做到这一点我做的

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

这个API,你使用的是什么库?什么类型是'engine','ListVector','Vector'? –

+2

看起来你有一个向量包含三个元素,每个元素本身就是一个向量。你正在迭代这三个元素。如果你想遍历这三个向量的元素,你需要在第一个循环内部进行第二次循环。 –

+1

什么是“SEXP”?这基本上就是你在这里打印的内容。 –

回答

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