274
Le logiciel R - Maˆ ıtriser le langage
Astuce
Sous Linux, il est possible et assez ais´ e d’acc´ eder ` a des sous-routines
LAPACK depuis R. Par exemple, pour utiliser la sous-routine zhpevx qui
calcule les valeurs/vecteurs propres d’une matrice hermitienne, on peut
taper les instructions suivantes :
dyn.load(paste(.Library,"/../modules/lapack.so",sep=""))
is.loaded("zhpevx")"
6.5.3.4 M´ elanger des librairies C/C++ et Fortran
Il est possible d’appeler des fonctions C/C++ depuis un code Fortran, en
utilisant l’instruction F77_SUB(name). Voyons ceci sur un exemple, qui permet
de g´ en´ erer deux observations ind´ ependantes : l’une de loi N(0, 1) et l’autre
de loi uniforme. Le programme Fortran ci-dessous utilise les fonctions (en C)
GetRNGstate, PutRNGstate, rnorm et runif de l’API R, que nous avions d´ ej` a
utilis´ ees dans la section 6.5.3.1. Sauvegardez-le dans un fichier nomm´ e random.f.
1
SUBROUTINE random (x ,y)
2
real * 8 normrnd , unifrnd , x , y
3
CALL rndstart ()
4
x = normrnd ()
5
y = unifrnd ()
6
CALL rndend ()
7
RETURN
8
END
Il vous faut ensuite cr´ eer le fichier random.c suivant :
1 # include
2 # include < Rmath .h >
3 void F77 _ SUB ( rndstart )( void ) { GetRNGstate ();}
4 void F77 _ SUB ( rndend )( void ) { PutRNGstate ();}
5 double F77 _ SUB ( normrnd )( void ) { return rnorm (0 ,1);}
6 double F77 _ SUB ( unifrnd )( void ) { return runif (0 ,1);}
Pour compiler le tout afin de cr´ eer votre fichier DLL, utilisez les instructions
suivantes :
gfortran -c random.f -o randomf.o
gcc -c random.c -o randomc.o -I"C:\Program Files\R\R-3.1.0\include"
gfortran -shared randomf.o randomc.o -o random.dll ^
-L"C:\Program Files\R\R-3.1.0\bin\i386" -lR
Précédent

- 307/701

Suivant