Chapitre 6. Programmation en R
263
Astuce
Notez qu’il est possible d’inclure plusieurs fichiers objets dans une mˆ eme
librairie, qui contiendra ainsi plusieurs fonctions. Par exemple, si nous disposions du fichier choose.o contenant le code machine d’une fonction calculant les coefficients binomiaux, il serait possible d’incorporer deux fonctions
dans une DLL ainsi :
g++ -shared -o combn.dll combn.o choose.o
Linux
Sous Linux, les « fichiers DLL » ont plutˆ ot une extension .so (pour shared object). Par cons´ equent, il vous faudra remplacer toutes les occurences
de l’extension .dll par l’extension .so.
Mac
Sous MacOS, les « fichiers DLL » ont plutˆ ot une extension .dylib (pour
dynamic library). Par cons´ equent, il vous faudra remplacer toutes les occurences de l’extension .dll par l’extension .dylib. Notez aussi que sous
MacOS, il faudra remplacer g++ -shared par g++ -dynamic.
Dans R, on peut maintenant (apr` es s’ˆ etre plac´ e dans le bon r´ epertoire)
lancer les instructions suivantes :
> combn(5,3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]
1
1
1
1
1
1
2
2
2
3
[2,]
2
2
2
3
3
4
3
3
4
4
[3,]
3
4
5
4
5
5
4
5
5
5
> source("combn.R")
> combnRC(5,3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]
1
1
1
1
1
1
2
2
2
3
[2,]
2
2
2
3
3
4
3
3
4
4
[3,]
3
4
5
4
5
5
4
5
5
5
> system.time(x <- combn(200,3))
user system elapsed
2.056
0.024
2.073
> system.time(x <- combnRC(200,3))
user system elapsed
0.236
0.000
0.235
On constate ainsi un gain de temps important avec l’utilisation de notre
nouvelle fonction R qui utilise le code ´ ecrit en C/C++.
Précédent

- 296/701

Suivant