2017-10-16 17 views
3

私は、RのCライブラリを使って、ライブラリの機能を使ってカスタムC関数を作成し、.C-Interfaceを使ってこれらのC関数にアクセスしています。Cの構造体へのポインタを整数として格納

いくつかのCコードでは、いくつかのカスタム構造体にスペースを割り当てて、それらのポインタをRに格納したいので、これらの構造体を.Cの連続呼び出しで使用することができます。 .C関数を使いながら、C構造体へのポインタをintにキャストしてRに整数として格納することができます。この整数を後で.C経由で呼び出しに渡すと、構造体を追跡して問題なく使用することができます。

私のやや素朴な質問です:これらのポインタをRの整数に格納すると何が問題になりますか?それは正常に動作するので、私はそこにいくつかの欠点があると仮定しているが、私はそれに関する情報を見つけることができませんでした。

+0

私はRに精通していませんが、 'int 'へのポインタをキャストすると' sizeof(void *) 'が' sizeof(int) 'より大きい可能性があります。これには 'intptr_t'があります。 – DeiDei

答えて

3

64ビットプラットフォームでもRの整数は32ビットです。したがって、64ビットシステムで作業する場合、これは機能しません(ポインタは64ビットになります)。

Rにはこの機能があります。 the 'Writing R Extensions' manual, the section on 'External pointers and weak references'を参照してください。

C++に切り替えたい場合(コードのすべてを書き直す必要はありません)、これを簡単にするRcppパッケージを使用できます。例を参照してくださいExternal pointers with Rcpp

関連する問題