Comment faire communiquer
C, Python, R … ?
Programmation Avançée
Debret Gaëlle / Maupetit Julien
Le 29/09/05 M2BI
Objectif :
- Interfacer des programmes écrits dans différents langages
Application :
- Importer une librairie partagée C dans R
- Importer une librairie partagée C dans Python
29/09/05 Interface C/R/Python 2
Plan
I. Interface C / R :
1. Lancer une librairie dynamique sous R
2. Passer des arguments
3. Modifier des valeurs
4. Interfaçage pour un tableau 2D
5. Fonctions d'interfaçage sous R
II. Swig
1. Généralités
2. Application, interface C / Python
29/09/05 Interface C/R/Python 3
Plan
I. Interface C / R :
1. Lancer une librairie dynamique sous R
2. Passer des arguments
3. Modifier des valeurs
4. Interfaçage pour un tableau 2D
5. Fonctions d'interfaçage sous R
II. Swig
1. Généralités
2. Application, interface C / Python
29/09/05 Interface C/R/Python 4
Chargement d'une librairie C dans R
Rien de tel qu'un exemple pour comprendre :
$> cat fic.c
#include <stdio.h>
void hello (){
printf("Test reussi\n");
}
$> gcc –c fic.c
$> gcc –shared fic.o –o libMBI.so
$> R
> dyn.load("libMBI.so")
> is.loaded("coucou")
[1] FALSE
> is.loaded("hello")
[2] TRUE
> .C("hello")
Test reussi
>
Attention aux subtilités :
La fonction appelée par .C dans
R ne doit pas retourner de valeur
Lorsque l'on fait appel à une
fonction par .C les objets
passés en argument sont
copiés !!!
De même après l'appel, les
objets sont à nouveau copiés
pour être mis dans une liste
29/09/05 Interface C/R/Python 5
Passage d'arguments
Les objets passés en arguments sont considérés comme des pointeurs dans la fonction C
Comme les objets sont copiés lors de l'appel via .C,
c'est l'adresse de la copie qui est transmise à la fonction
$> cat fic.c
#include <stdio.h>
void test (int *a){
printf("Test reussi: %d !\n",*a);
}
$> gcc –c fic.c
$> gcc –shared fic.o –o libMBI.so
$> R
> dyn.load("libMBI.so")
> a = 54
> .C("test",as.integer(a))
Test reussi : 54 !
[[1]]
[1] 54
1 / 20 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !