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:
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)
} |
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):
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;
} |
Je compile:
R CMD SHLIB AppelFctUtilPackage.c
Le fichier AppelFctUtilPackage.dll est bien créé.
Enfin, je retourne dans R:
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)) |
Erreur retournée:
Erreur : type 102251408 est indisponible dans 'type2char'
Merci à tous ceux (et toutes celles) qui auront eu le courage de lire jusqu'ici 
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