Chapitre 6. Programmation en R
265
Astuce
Le package rbenchmark permet de comparer facilement le gain esp´ er´ e,
en termes de temps de calcul, lors de l’utilisation d’une fonction R-C/C++
ou R-Fortran versus une fonction R pur. Essayez par exemple de le v´ erifier
sur les r´ esultats obtenus dans la prise en main pr´ ec´ edente au moyen du
code qui suit :
n <- 1000
phi <- 0.75
M <- 2000
dyn.load("ar1sim.dll")
benchmark(Rcode=ar1simR(n,phi,M),
Ccode=.C("ar1simC",as.integer(n),phi,
as.integer(M),res=0.0)$res,
replications=1000)
Astuce
Le Fortran et le R stockent les matrices (tableaux) de la mˆ eme mani` ere :
les lignes d’une mˆ eme colonne sont stock´ ees cons´ ecutivement en m´ emoire.
En C/C++, ce sont les colonnes d’une mˆ eme ligne qui sont cons´ ecutives. Il
faut donc faire attention lorsque l’on envoie une matrice de R vers C/C++.
Par exemple, l’´ el´ ement d’indice [i,j] d’une matrice R correspond ` a l’´ el´ ement d’indice [(j-1) * nombre-de-lignes + (i-1)] en C/C++ (en C/C++,
les indices commencent ` a 0).
6.5.3 Appel de librairies C/C++ ou Fortran externes
Il est possible d’utiliser une fonction pr´ esente dans une librairie externe
` a R au moyen des fonctions R .C() (pour les librairies C/C++) ou .Fortran()
(pour les librairies Fortran).
Astuce
Une utilisation amusante de cette approche, permettant de v´ erouiller la
session Windows, est la suivante :
dyn.load(file.choose()) # S´ electionner le fichier
# C:/windows/system32/user32.dll
.C("LockWorkStation")
Il est ´ egalement possible d’appeler une librairie de fonctions externes directement depuis votre code C/C++ ou Fortran. Nous allons pr´ esenter quelques
Précédent

- 298/701

Suivant