Bonjour,
la question a déjà été abordée dans de nombreux forums (notamment celui-ci), mais je ne m'en sors pas
Afin de "comprendre ce que je ne comprend pas", je vous soumets un petit exemple de code: si vous pouviez m'indiquer mes erreurs svp
Tout d'abord, je crée, dans R, une fonction recup_Donnees.R, qui prend en entrée le nom d'un fichier, fait un calcul -de survie- et me retourne la statistique du chi2:Ensuite, dans C, je veux appeler cette fonction pour comparer la statistique de test à un nombre fixé (exemple totalement absurde/inutile, construit seulement pour comprendre le passage R<->C):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 recup_Donnees <- function(x){ library(survival) DataF <- read.csv2(paste("C:\\Users\\utilisateur\\Documents\\", x, sep = ""), header=T) stat_test <- survdiff(Surv(temps, statut) ~ groupe, data=DataF) return(stat_test$chisq) }
Je compile:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <R.h> #include <Rinternals.h> void AppelFctUtilPackage(SEXP MyData, void **fct, void *env, int *res) { SEXP f, rho; int i; /* Mettre la fonction R et son environnement dans des variables de type SEXP */ f = (SEXP)fct; rho = (SEXP)env; PROTECT(res=allocVector(res, REALSXP)); i = lang2(f, MyData); Rprintf("%d", i); if (i>18) { res = 1; } else { res = 2; } UNPROTECT(1); return res; }Le fichier AppelFctUtilPackage.dll est bien créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part R CMD SHLIB AppelFctUtilPackage.c
Enfin, je retourne dans R:Erreur retournée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dyn.load("C:\\Users\\utilisateur\\Documents\\AppelFctUtilPackage.dll") source("C:\\Users\\utilisateur\\Documents\\recup_Donnees.R") res <- 0 .C("AppelFctUtilPackage", "DataFreireich.csv", recup_Donnees, new.env(), res=as.integer(res))Merci à tous ceux (et toutes celles) qui auront eu le courage de lire jusqu'ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part Erreur : type 102251408 est indisponible dans 'type2char'
Et merci d'avance pour votre aide!
Bonne journée
PS: 1/ pour faire tourner, voici où trouver DataFreireich.csv: ici
2/ si gbdivers passe par ici: il me semble que Rcpp ne permet l'incorporation de code R que dans C++ et pas dans C. Pourriez-vous me le confirmer svp? Merci!
Partager