Comment piloter R à partir de Matlab et vice versa ?
Le logiciel Matlab est très populaire dans le domaine des mathématiques, de l'ingénierie et de la recherche. Il regroupe une vaste communauté de scientifiques qui l'utilisent au quotidien et qui mettent en ligne leurs propres "ToolBox". Je développe actuellement une de ces boites à outils permettant d'analyser des orientations dans des textures, et d'effectuer des statistiques sur celles-ci. Dans cette second étape, on préfère alors à Matlab un logiciel spécifique à l'utilisation des statistiques, j'ai nommé, R !
Alors bien sûr on pourrait exporter les données de Matlab dans un fichier texte, les analyser avec R, puis les ré-exporter vers Matlab. Mais vous conviendrez qu'il serait intéressant de pouvoir faire directement appel à R à partir de Matlab ! Et le nec plus ultra d'appeler Matlab à partir de R ! C'est là qu'intervient le package bidirectionnel RMatlab dont je détaille l'installation ci-dessous.
Installation de R
La procédure est tirée du site d'Ubuntu. Si comme moi vous disposez d'Ubuntu, la première étape consiste à savoir quelle est votre version, pour cela tapez :
lsb_release -d
J'obtiens pour ma part :
Description: Ubuntu-Secure-Remix 12.04.1 LTS 31.08.2012
Ainsi dans le tableau figurant à l'adresse suivante j'apprends que le nom de code de ma version est Precise Pangolin.
Ouvrez maintenant le fichier suivant :
sudo gedit /etc/apt/sources.list
Editez ce fichier en rajoutant cette ligne :
deb votre.miroir.cran.prefere/bin/linux/ubuntu nom_de_code_ubuntu
Où vous remplacez "votre.miroir.cran.prefere" par un des miroirs de cette liste, et "nom_de_code_ubuntu" par le nom de votre version. Ce qui permet d'ajouter le dépôt à vos sources de mise à jour. Dans mon cas j'insère donc en fin de fichier la ligne :
deb http://mirror.ibcp.fr/pub/CRAN/bin/linux/ubuntu precise/
L'installation de R s'effectue alors via la commande :
sudo apt-get install r-base
Installation du package RMatlab
Télécharger et extraire l'archive RMatlab_0.2-5.tar.gz disponible sur le site officiel.
tar xzvf RMatlab_0.2-5.tar.gz
Télécharger ce patch que vous copiez dans un ficher RMatlab.patch dans le dossier RMatlab ; puis appliquez le :
cd RMatlab patch -p1 < RMatlab.patch
Vous devriez normalement obtenir :
patching file src/initializeR.c patching file src/Makefile.in
Ensuite nous avons besoin de savoir où a été installé la librairie R. En général elle se trouve ici :
/usr/lib/R/
Le cas échéant vous pouvez toujours rechercher le fichier principal libR.so grâce à l'une des deux commandes suivantes :
locate libR.so sudo find . -type f -exec grep 'libR.so' {} \;
De même on a besoin de savoir où se cachent les headers de R, pour cela on recherche de la même manière le fichier Rinternals.h , se trouvant généralement ici :
/usr/share/R/include
On va retenir ces deux répertoires en les stockant dans les variables d'environnement ci-après :
export R_HOME=/usr/lib/R export R_INCLUDE_DIR=/usr/share/R/include
Maintenant on se replace dans le dossier RMatlab et on lance la configuration :
./configure
Ensuite on sort du dossier et on installe le package avec R :
cd .. R CMD INSTALL RMatlab
Si tout se passe bien l'installation doit se terminer, et vous devriez voir afficher dans la console le dossier où on a été installé RMatlab, chez moi :
R/x86_64-pc-linux-gnu-library/2.14/RMatlab/
Personnellement au cours de l'installation cette erreur était levée :
mex: -argcheck not a valid option.
Ceci est du au fait que cette option est apparemment supprimer de la version 2010 de Matlab. J'ai donc du l'effacer des fichiers Makefile et Makefile.in à la ligne correspondante :
MEX_ARGS=$(R_MEX_CFLAGS) @DEFINES@
Une fois l'installation réussie il reste encore à bien indiquer les chemins. Pour instancier ces "path" vous pouvez exécuter le script disponible :
cd RMatlab/inst/scripts/ chmod u+x RMatlab.sh ./RMatlab.sh
Mais je préfère personnellement les remplir à la main :
export R_HOME=/usr/lib/R export R_SHARE_DIR=/usr/share/R/share
Appeler R à partir de Matlab
Lancer Matlab en mode console (plus commode pour repérer une éventuelle erreur) :
matlab -nojvm -nodisplay
Ensuite on va signaler à Matlab où se situe les MEX du package RMatlab, qui a été installé je le rappelle ici :
R/x86_64-pc-linux-gnu-library/2.14/RMatlab/
Dans Matlab on tape donc :
addpath('R/x86_64-pc-linux-gnu-library/2.14/RMatlab/mex/')
On lance ensuite l'interpréteur R dans Matlab :
initializeR({'RMatlab','--vanilla','--silent'})
Et enfin pour tester on appelle une fonction de R, toujours dans Matlab :
x=callR('rpois',10,3)
Qui devrait, normalement, vous renvoyer :
x = 5 1 1 2 2 6 2 2 2 2
Pour une description des fonctionnalités du package RMatlab se référer à la documentation.
Si des bugs surviennent vous pouvez laisser un commentaire.
Fin du tutoriel