Bonjour je voudrais faire appel à C pour que mon programme tourne plus vite
j'ai des notions en C mais très éloignés
quelq'un pourrait il m'aider à traduire mon code
c'est une fonction
mais peut être qu'il suffirait de traduire le morceau qui prend du temps
voilà la fonction en entier
la boucle prenant du temp est en rouge
new_ponderation=function(chemin1,chemin2,chemin3,nb_camp,Nb_ech)
{
#chemin1 : chemin permettant d'accéder au premier tableau de sortie de la BAO
#chemin2 : chemin permettant d'accéder aux tableaux rbao* de sortie de la BAO
#contient les données restructurées à l'aide de perl
print ("debut programme")
print(date())
#début de la fonction de vraisemblance
tab_b=read.table(chemin1,sep=" ")
tab_b=cbind(as.factor(tab_b[,1]),tab_b[4:5],tab_b[7])
names(tab_b)=c("N_camp","N_var","nom_var","Kij")
Nb_param=length(xname)
sigma=matrix(0,Nb_var,Nb_ech)
somme_obs_predi=matrix(0,Nb_var,Nb_ech)
poids_simu=matrix(0,1,Nb_ech)
poids_log=matrix(0,1,Nb_ech)
#calcul du nombre d'observations par type de mesure
nt=0
for (i in 0:Nb_var-1)
{
nt[i+1]= sum(tab_b[tab_b$N_var==(i),4])
}
tab_nt=cbind(as.vector(tab_b$nom_var[1:Nb_var]),nt)
tab_var=list()
for (i in 1:Nb_var)
{
tab_var[[i]]=matrix(data =scan(file=paste(chemin3,xvar[i],".txt",sep=""),what = numeric(0)),nrow=as.numeric(tab_nt[i,2])*Nb_ech, ncol = 3, byrow = TRUE)
}
for (e in 1:Nb_ech)
{
#calcul de la pondération pour un échantillon (correspond à une ligne du fichier .rbao
#calcul des sommes observés - prédits au carré
somme_obs_pred=matrix(0,1,Nb_var)
#tirage des 1/sigma^2
sigmaj=matrix(0,1,Nb_var)
poids_log[e]=0
for (i in 1:Nb_var)
{
if (dim(tab_var[[i]])[[1]]!=0)
{
tab_var_inter=tab_var[[i]]
tab_var_inter.e=tab_var_inter[tab_var_inter[,1] == e,]
somme_obs_pred[i]=sum((tab_var_inter.e[,2]- tab_var_inter.e[,3])^2)
sigmaj[i]=rgamma(1,shape=as.numeric(tab_nt[i,2]),scale=(2/(as.numeric(somme_obs_pred[i]))))
poids_log[e]=poids_log[e]+(((as.numeric(tab_nt[i,2]))/2)+1)*log(2/(as.numeric(somme_obs_pred[i])))
}
else
{
somme_obs_pred[i]="NA"
sigmaj[i]="NA"
}
} sigma[,e]=sigmaj
somme_obs_predi[,e]=somme_obs_pred
}
param=as.data.frame(matrix(data =scan(file=paste(chemin3,"para.txt",sep=""),what = numeric(0)),nrow=Nb_ech, ncol = Nb_param, byrow = TRUE))
param=t(param)
resul=list(poids_log,param,sigma,somme_obs_predi)
names(resul)=c("ponderation_log","param","sigma","somm_erreur")
print ("fin programme")
print(date())
return(resul)
}