.Call
の配列をC共有ライブラリの関数に戻し、その配列をRで使用するにはどうすればよいですか?例えば.CallからC共有ライブラリへの構造体の配列を返す方法
:
typedef struct{
int thing1;
int thing2;
float thing3;
float thing4;
char thing5;
//... many more things of various simple types
} MY_STRUCT;
SEXP R_Calls_Me(SEXP args) {
// Do stuff with args...
// Create arrayOfMyStructs as what type??
return arrayOfMyStructs;
}
どのようなタイプは、Rは、それを使用することができarrayOfMyStructs
なのですか?
これは一般的なことですが、R拡張を記述するためのドキュメントではこれの例は見つかりません。
最終的に私が望むのは、C関数への単一の呼び出しを使用してこれらの構造の任意の数を返すことができることです。あなたの例は、1つの構造体を返す方法を示しています。これを達成するためにベクトルのベクトルを単純に作成できますか? – cachance7
これは便利なことです。あるいは、それらが同じであれば、配列(=ベクトル)を使うことができます。列が構造レコードであり、行が異なる構造であるデータフレームを考えます。 'SET_VECTOR_ELT(res、0、ScalarInteger(a.thing1))'の代わりに、 'SEXP t1 = allocVector(INTSXP、n);のようなものを置き換えます。 SET_VECTOR_ELT(res、0、t1); int * t1i = INTEGER(t1); (int i = 0; i
私はあなたの2番目のアプローチがRで返されたデータをどのように使用するのかを最も理にかなっていると思います。ありがとうございました。 – cachance7