260
Le logiciel R - Maˆ ıtriser le langage
:: Ex´ ecution de la fonction:
moncombn.exe
Vous pouvez constater que ce calcul (sans affichage du r´ esultat) est effectu´ e
extrˆ emement rapidement.
6.5.2 Appel du code C/C++ (ou Fortran) depuis R
Nous allons maintenant voir comment il est possible d’appeler le code C++
du fichier combn.cpp (ou plutˆ ot une version compil´ ee de celui-ci) directement
depuis R, sans utiliser de fonction main. Pour cela, on cr´ ee une enveloppe (wrapper en anglais) R contenant un appel vers la fonction C++.
Remarque
R ne peut appeler que des fonctions C/C++ ou Fortran ne retournant
pas de valeur. Les fonctions C/C++ doivent donc ˆ etre de type void et les
routines Fortran, des subroutines. Les r´ esultats devront ˆ etre mis dans des
arguments de la fonction d’appel.
R´ ecup´ erez le fichier http://biostatisticien.eu/springeR/combn.R dont
le code est pr´ esent´ e ci-dessous :
1 combnRC <- function (n ,m) {
2 combmat <- matrix (0 , nrow =m , ncol = choose (n ,m ))
3 lib <- paste (" combn " ,. Platform $ dynlib . ext , sep ="")
4 dyn . load ( lib )
5 out <- .C(" combnC " , res = as . integer ( combmat ),
6
as . integer (n), as . integer (m ))
7 combmat <- matrix ( out $ res , nrow =m , byrow =F)
8 dyn . unload ( lib )
9 return ( combmat )
10 }
Remarque
Pour appeler le code Fortran, remplacez la ligne 5 du code ci-dessus
par
out <- .Fortran("combnF",res=as.integer(combmat),
Les fonctions dyn.load() et dyn.unload() permettent respectivement de
charger et de d´ echarger de la m´ emoire de R les ressources pr´ esentes dans un
fichier DLL (pour Dynamic Link Library, ou en fran¸ cais biblioth` eque de liens
Le logiciel R - Maˆ ıtriser le langage
:: Ex´ ecution de la fonction:
moncombn.exe
Vous pouvez constater que ce calcul (sans affichage du r´ esultat) est effectu´ e
extrˆ emement rapidement.
6.5.2 Appel du code C/C++ (ou Fortran) depuis R
Nous allons maintenant voir comment il est possible d’appeler le code C++
du fichier combn.cpp (ou plutˆ ot une version compil´ ee de celui-ci) directement
depuis R, sans utiliser de fonction main. Pour cela, on cr´ ee une enveloppe (wrapper en anglais) R contenant un appel vers la fonction C++.
Remarque
R ne peut appeler que des fonctions C/C++ ou Fortran ne retournant
pas de valeur. Les fonctions C/C++ doivent donc ˆ etre de type void et les
routines Fortran, des subroutines. Les r´ esultats devront ˆ etre mis dans des
arguments de la fonction d’appel.
R´ ecup´ erez le fichier http://biostatisticien.eu/springeR/combn.R dont
le code est pr´ esent´ e ci-dessous :
1 combnRC <- function (n ,m) {
2 combmat <- matrix (0 , nrow =m , ncol = choose (n ,m ))
3 lib <- paste (" combn " ,. Platform $ dynlib . ext , sep ="")
4 dyn . load ( lib )
5 out <- .C(" combnC " , res = as . integer ( combmat ),
6
as . integer (n), as . integer (m ))
7 combmat <- matrix ( out $ res , nrow =m , byrow =F)
8 dyn . unload ( lib )
9 return ( combmat )
10 }
Remarque
Pour appeler le code Fortran, remplacez la ligne 5 du code ci-dessus
par
out <- .Fortran("combnF",res=as.integer(combmat),
Les fonctions dyn.load() et dyn.unload() permettent respectivement de
charger et de d´ echarger de la m´ emoire de R les ressources pr´ esentes dans un
fichier DLL (pour Dynamic Link Library, ou en fran¸ cais biblioth` eque de liens
