Transcription listes R en structures C
2 participants
Page 1 sur 1
Transcription listes R en structures C
Bonjour a tous,
Je code beaucoup en R, mais les temps de calculs étant très long (boucles) je dois me mettre au C.
Voici un exemple de fonction R que je souhaite retranscrire en C:
J'ai donc commencer par définir des structures en C (identiques à mes listes R)
Je cherche maintenant comment donner le plus efficacement possible les valeurs de ces éléments de liste R à mes structures C sans tout renseigner "à la main" comme
J'ai commencé à écrire ma fonction, mais j'avoue être complétement larguée:
Quelqu'un aurait-il des idées, je suis preneuse?
Je vous remercie beaucoup!
Nane
Je code beaucoup en R, mais les temps de calculs étant très long (boucles) je dois me mettre au C.
Voici un exemple de fonction R que je souhaite retranscrire en C:
- Code:
inoc <- function(liste, nom) {
isc <- 0
for (i in 1:length(liste[[length(liste)]]$feuilles)) {
for (k in 1:7) {
isc <- isc + nom$param$omega * liste[[length[[liste]]$feuilles[[i]]$compartiments[[k]]$valeur
}
}
isc
}
J'ai donc commencer par définir des structures en C (identiques à mes listes R)
Je cherche maintenant comment donner le plus efficacement possible les valeurs de ces éléments de liste R à mes structures C sans tout renseigner "à la main" comme
- Code:
liste.feuilles[1].compartiments[1].valeur= 15
liste.feuilles[1].compartiments[2].valeur= 26
J'ai commencé à écrire ma fonction, mais j'avoue être complétement larguée:
- Code:
void inoc_s_c(int *n, double *omega, double *valeur, double *isc)
{
int i,k;
double isc=0.;
for (i=1; i<*n; i++)
for(k=1; k=7; k++)
isc+=(omega)*(
}
Quelqu'un aurait-il des idées, je suis preneuse?
Je vous remercie beaucoup!
Nane
Naneba- Messages : 1
Date d'inscription : 16/02/2013
Re: Transcription listes R en structures C
Pour répondre correctement, il faudrait connaitre à la fois le R et le C ... Pas évident ... Je vais déjà essayer de comprendre le code R (je ne sais pa comment on commente en R alors je vais faire comme en C :
En fait, on a probablement affaire à une structure 'nom' et à un tableau de structures à 2 dimensions 'liste' ...
Avant d'aller plus loin il faut définir ces structures en C et faire le choix du tableau statique (taille prédéfinie, simple à concevoir et à gérer) ou dynamique (taille déterminée à l'exécution) et là, ça devient vite complexe.
Concernant le code posté
Pour finaliser, il faut connaitre la structure du tableau (d'éléments de type struct data) à deux dimensions pour que ça ressemble à ça :
Beaucoup de réponses à certaines questions ici :
http://www.bien-programmer.fr/notes.php
- Code:
inoc <- function (liste, nom) // cette ligne définit une fonction ?
// inoc est le nom de la fonction ?
// liste et nom sont les paramètres ?
{
isc <- 0 // isc est une variable locale initialisée à 0 ?
for (i in 1:length(liste[[length(liste)]]$feuilles))
/* une boucle for dont l'indice i varie de 1 à ???
euh, c'est plutôt complexe comme expression et sans connaitre
la structure de 'liste' ni la syntaxe appropriée, ça reste incompréhensible ...
Admettons que ce soit la taille d'un tableau (à 2 dimensions ?)
*/
{
for (k in 1:7) // et une boucle imbriquée avec k variant de 1 à 7
{
isc <- isc + nom$param$omega * liste[[length[[liste]]$feuilles[[i]]$compartiments[[k]]$valeur
// faire la somme de tous les valeurs lues multipliée par le 'sous paramètre' omega de 'nom' ...
}
}
isc // retourner les résultat.
}
En fait, on a probablement affaire à une structure 'nom' et à un tableau de structures à 2 dimensions 'liste' ...
Avant d'aller plus loin il faut définir ces structures en C et faire le choix du tableau statique (taille prédéfinie, simple à concevoir et à gérer) ou dynamique (taille déterminée à l'exécution) et là, ça devient vite complexe.
Concernant le code posté
- Code:
void inoc_s_c(int *n, double *omega, double *valeur, double *isc)
{
int i,k;
double isc=0.;
for (i=1; i<*n; i++)
for(k=1; k=7; k++)
isc+=(omega)*(
}
Pour finaliser, il faut connaitre la structure du tableau (d'éléments de type struct data) à deux dimensions pour que ça ressemble à ça :
- Code:
double inoc_s_c (int n, double omega, struct data**tableau)
{
int i,k;
double isc = 0.;
for (i=0; i<n; i++)
for(k=0; k<7; k++)
isc += omega * tableau[i][k].feuille.compartiment.valeur ;
return isc;
}
Beaucoup de réponses à certaines questions ici :
http://www.bien-programmer.fr/notes.php
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum