Chapitre 6. Programmation en R
277
le code C/C++ devra consister en une fonction (nomm´ ee pmvtC ci-apr` es) qui
renvoie une structure de type SEXP et qui prend aussi comme arguments des
SEXP. Le code ci-dessous, disponible ` a l’adresse http://biostatisticien.eu/
springeR/pmvt.cpp, sera celui qui, une fois transform´ e en fichier DLL, sera
appel´ e par la fonction .Call().
1 # include
2 # include < Rdefines .h >
3 # include " Rmath .h"
4 # include
5 extern "C" {
6
SEXP pmvtCR ( SEXP Rupper , SEXP Rcorr , SEXP Rdf ,
7
SEXP Rpmvt , SEXP Renv , SEXP Rres ) {
8
SEXP R_ fcall ;
9
if (! isFunction ( Rpmvt ) & ( Rpmvt != R_ NilValue ))
10
error ( "Rpmvt doit ^ etre une fonction" );
11
if (! isEnvironment ( Renv ))
12
error ( "Renv doit ^ etre un environnement" );
13
PROTECT (R_ fcall = lang4 ( Rpmvt , Rupper , Rcorr , Rdf ));
14
REAL ( Rres )[0] = REAL ( eval (R_ fcall , Renv ))[0];
15
UNPROTECT (1);
16
return ( Rres );
17
}
18 }
Pour compiler ce fichier, il faut utiliser les instructions suivantes :
g++ -c pmvt.cpp -o pmvt.o -I"C:\Program Files\R\R-3.1.0\include"
g++ -shared -o pmvt.dll pmvt.o ^
-L"C:\Program Files\R\R-3.1.0\bin\i386" -lR
Linux
Sous Linux, on utilisera les instructions :
g++ -m64 -I/usr/include/R -I/usr/local/include -fpic \
-c pmvt.cpp -o pmvt.o
R CMD SHLIB pmvt.cpp
# ou bien:
g++ -m64 -shared -L/usr/local/lib64 -o pmvt.so pmvt.o \
-L/usr/lib64/R/lib -lR
Vous pouvez maintenant utiliser cette fonction depuis R de la fa¸ con suivante. T´ el´ echargez le fichier http://biostatisticien.eu/springeR/pmvt.R
contenant le code suivant :
277
le code C/C++ devra consister en une fonction (nomm´ ee pmvtC ci-apr` es) qui
renvoie une structure de type SEXP et qui prend aussi comme arguments des
SEXP. Le code ci-dessous, disponible ` a l’adresse http://biostatisticien.eu/
springeR/pmvt.cpp, sera celui qui, une fois transform´ e en fichier DLL, sera
appel´ e par la fonction .Call().
1 # include
2 # include < Rdefines .h >
3 # include " Rmath .h"
4 # include
5 extern "C" {
6
SEXP pmvtCR ( SEXP Rupper , SEXP Rcorr , SEXP Rdf ,
7
SEXP Rpmvt , SEXP Renv , SEXP Rres ) {
8
SEXP R_ fcall ;
9
if (! isFunction ( Rpmvt ) & ( Rpmvt != R_ NilValue ))
10
error ( "Rpmvt doit ^ etre une fonction" );
11
if (! isEnvironment ( Renv ))
12
error ( "Renv doit ^ etre un environnement" );
13
PROTECT (R_ fcall = lang4 ( Rpmvt , Rupper , Rcorr , Rdf ));
14
REAL ( Rres )[0] = REAL ( eval (R_ fcall , Renv ))[0];
15
UNPROTECT (1);
16
return ( Rres );
17
}
18 }
Pour compiler ce fichier, il faut utiliser les instructions suivantes :
g++ -c pmvt.cpp -o pmvt.o -I"C:\Program Files\R\R-3.1.0\include"
g++ -shared -o pmvt.dll pmvt.o ^
-L"C:\Program Files\R\R-3.1.0\bin\i386" -lR
Linux
Sous Linux, on utilisera les instructions :
g++ -m64 -I/usr/include/R -I/usr/local/include -fpic \
-c pmvt.cpp -o pmvt.o
R CMD SHLIB pmvt.cpp
# ou bien:
g++ -m64 -shared -L/usr/local/lib64 -o pmvt.so pmvt.o \
-L/usr/lib64/R/lib -lR
Vous pouvez maintenant utiliser cette fonction depuis R de la fa¸ con suivante. T´ el´ echargez le fichier http://biostatisticien.eu/springeR/pmvt.R
contenant le code suivant :
