0

ここ.CでのRの関数のドキュメントでは、C関数自体が戻り型である必要があると記載されています。(またはRcppではなく)関数を使用する継承されたコードに取り組んでいますが、サイズが不明なベクトルを「返す」関数を作成したいと思います。このベクトルのサイズがわかっていれば、それをRに割り当て、ポインターをCに渡すことができます。その後、その内容を変更できます。サイズがわからないので、Rで宣言する方法は?この形になると思いますが、詳細はわかりません。void.C.Call

output <- ?????
storage.mode(a) <- "integer"
tmp <- .C("myfunc",a,output)
4

1 に答える 1

3

.Call()代わりに使用することをお勧めします.C()-r-develリストの最近の議論を参照してください。.C()新しいプロジェクトに使用することを提案している経験豊富なR開発者はほとんどいないと思います。

これが簡単なイラストです。Rcppを使用する必要はありません。コンパクトではありませんが、プレーンCAPIでも同じコードを記述できます。

R> fx <- rcpp(signature(sn="integer"), body='   // rcpp() is from inline 0.3.10
+    int size = as<int>(sn);
+    IntegerVector v(size); 
+    for (int i=0; i<size; i++) v[i] = i;
+    return(v); 
+ ') 
R> fx(3) 
[1] 0 1 2   
R> fx(7) 
[1] 0 1 2 3 4 5 6  
R>

古いインターフェースでは、または.C()のようなアトミックCタイプのみを返すことができ、実際にオブジェクトを返すことができる場合にのみRによる管理用のオブジェクトを「マーク」できるため、Cレベルでスペースを割り当てることはできません。*int*doubleSEXPSEXP.Call()

于 2012-10-05T20:11:28.500 に答える