Transmission de données entre C et R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Vuadens
Messages : 20
Enregistré le : 12 Sep 2007, 10:03

Transmission de données entre C et R

Messagepar Christophe Vuadens » 19 Oct 2007, 10:17

J'avoue sécher un peu avec mes fonctions C. En allant voir ce topic (http://forums.cirad.fr/logiciel-R/viewtopic.php?t=167), j'arrive à peu près à faire des fonctions C qui fonctionnent tant qu'elles n'ont pas d'arguments mais dès que j'en mets un les choses se compliquent très vite. Pour info, la fonction de base a ce fichier h:

Code : Tout sélectionner

#include <stdio.h>
# include <stdlib.h>
#include <R.h>

void copy_rep (char *mot);


Elle est compilée avec

Code : Tout sélectionner

gcc --shared -o copy_rep.dll copy_rep.c


car

Code : Tout sélectionner

Rcmd SHLIB copy_rep.c


ne fonctionne pas.

Et je tente de l'appeler avec

Code : Tout sélectionner

 .C("copy_rep",as.integer("toto"))
(la commande R n'est pas trouvée)


La fonction tourne mais avec une valeur indéfinie, si je demade à la place d'un char un int la ddl, prend 5800 suivi de 4 autres chiffres au hasard. Quelqu'un aurait-il eu le même problème?

Merci

[/quote]

Christophe Vuadens
Messages : 20
Enregistré le : 12 Sep 2007, 10:03

Messagepar Christophe Vuadens » 19 Oct 2007, 13:10

Petit rectificatif... Je suis arrivé à compiler avec Rcmd SHLIB mais ça ne fictionne toujours pas...[/quote]

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 22 Oct 2007, 08:02

bonjour,


Code : Tout sélectionner

void copy_rep (char *mot);

Code : Tout sélectionner

.C("copy_rep",as.integer("toto"))


premier problème : "copy_rep" accepte un pointeur de type char et l'argument fourni est un integer :')


La fonction tourne mais avec une valeur indéfinie, si je demade à la place d'un char un int la ddl, prend 5800 suivi de 4 autres chiffres au hasard. Quelqu'un aurait-il eu le même problème?


là ... je ne comprends pas.
L'argument de la fonction copy_rep n'est pas un argument "générique"

en espérant avoir aidé un peu


Pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 22 Oct 2007, 08:05

Bonjour,
L'utilisation des chaines de caractères R avec C se fait au moyen de fonctions spéciales (que je n'ai jamais utilisées). Ceci est un extrait de l'aide "Writing R Extensions", "5.7.7 Handling character data":
R character vectors are stored as STRSXPs, a vector type like VECSXP where every element is of type CHARSXP. The CHARSXP elements of STRSXPs are accessed using STRING_ELT and SET_STRING_ELT.

Il faut consulter cette aide pour plus d'informations.

Christophe Vuadens
Messages : 20
Enregistré le : 12 Sep 2007, 10:03

Messagepar Christophe Vuadens » 22 Oct 2007, 16:53

Excusez-moi pour le

Code : Tout sélectionner

 as.integer("toto")


C'est bien évidement une affreuse ineptie qui vient d'une affreuse erreure d'innatention de ma part quand, j'ai écrit le message...

Passons su ce détail, ça na toujours pas l'aire de marché alors j'ai fini par utiliser la méthode bourrin:

- R écrit le mot dans un fichier
- C le récupère avec une fonction pompée sur un forum
- Et il détruit le fichier

C'est pas joli du tout, tout ça mais ça marche

En tout cas merci à Pierre car c'est grâce à un de ces précédent messafe que je suis arrivé à faire du C pour R, même si c'est sans argument...

Arf, les mystère de l'info... Un peu de paranormal bien réel...

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 23 Oct 2007, 09:51

bonjour,

voici quelques exemples trouvés
sur le web qui pourraient peut-être aider :

http://www.sfu.ca/~sblay/R-C-interface.txt


@+ :)

Pierre
=@===--------¬-------¬------¬-----¬

liens utiles :

http://www.gnurou.org/Writing/SmartQuestionsFr

http://neogrifter.free.fr/welcomeOnInternet.jpg

]<((((*< -------------------------------


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité