#include<R.h>
#include<Rdefines.h>
で、あと必要なもの。Rのベクトル変数はSEXPで指定。関数宣言は、
SEXP likelihood(SEXP InitComplex,SEXP scn,SEXP ssn1,SEXP ssn2,SEXP theta);
とすれば返り値もベクトルになる。このRのベクトル変数を引数でもらったときはメモリ確保が必要。
SEXP p;
PROTECT(ssn1=AS_INTEGER(ssn1));
PROTECT(ssn2=AS_INTEGER(ssn2));
PROTECT(theta=AS_NUMERIC(theta));
PROTECT(p=allocVector(REALSXP,muallele*2));
最後のは関数中で宣言したR形式ベクトル変数の領域確保。
これはreturnする前にかならず解放する。
UNPROTECT(4);
return p;
ソース作成したらコンパイルは、
R CMD SHLIB **.c
で、.soファイルと.oファイルができる。
Rからの読み込みは、
dyn.load("**.so")
で、関数呼び出しは、
.Call("関数名",引数)
とする。この場合の引数はRらしからぬ厳密な型(モード?)宣言が必要。as.numericなどを使用する。
No comments:
Post a Comment