1

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)

各ベクターから特定の要素を取得できるようにしたいので、最初の実験では、すべての要素を出力できるように反復できるようにしたいと考えています。

これを行うために、私はやっています

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)
4

1 に答える 1

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 に関するその他のドキュメントを見つけることができます。

于 2016-10-27T12:52:29.690 に答える