2016-10-26 2 views
1

R 스크립트 (Renjin 라이브러리 사용)에서 값을 검색하고 자바에서 값을 조작하려고합니다. 는 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) 

내가 통해 반복 할 수 있도록하고자하는 첫 번째 실험에서, 그래서를 모든 집단.

내가

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

docs.renjin.org에서이 API에 대한 자세한 설명서를 찾을 수 있습니다 당신이 사용하고있는 도서관은? 'engine','ListVector','Vector'는 어떤 타입입니까? –

+2

3 개의 요소가 포함 된 하나의 벡터가있는 것처럼 보입니다. 각 요소는 그 자체가 벡터입니다. 이 세 요소를 반복합니다. 세 벡터의 요소를 반복하려면 첫 번째 루프 내부에 두 번째 루프가 필요합니다. –

+1

SEXP 란 무엇입니까? 그것은 본질적으로 당신이 여기서 인쇄하고있는 것입니다. –

답변

0

당신이 제공하는 "toString()"를 호출하는 끝낼 수 있도록 그러나 이것은 단지 별도로 벡터의 각을 출력 내가

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()); 
             } 
            } 

를하고있는 중이 야이 작업을 수행하려면 디버깅 출력이지만 일반적으로 벡터의 전체 내용을 인쇄하지는 않습니다.

당신은 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)); 
    } 
} 

당신은