fonction "boucle" sous R
3 participants
La Doua Dans l'Oeil :: Biologie :: Biométrie & Bioinformatique :: Questions & Débats :: Biostatistiques
Page 1 sur 1
Re: fonction "boucle" sous R
Est ce que quelqu'un peut m'aider à faire une boucle simple dans R ?
Voici ce que je veux faire :
j'ai une colonne "nom" avec dedans des codes pour chaque sujet : C01, C02..., C15.
J'ai une colonne "performances" avec dedans des 0 ou des 1 selon que le test a été réussi ou non. Chaque sujet a réalisé le test 20 fois.
Je veux obtenir la moyenne des performances par individu. J'ai la formule pour un individu : mean(performances[nom=="C01"]) mais j'aimerai que ça se fasse d'un coup pour chacun des individus. Et s'il pouvait me le sortir dans un fichier txt, je ne serais pas contre.
Je sais qu'il faut utiliser la fonction "for" mais même avec l'aide du logiciel je n'y arrive pas.
Merci d'avance !
Voici ce que je veux faire :
j'ai une colonne "nom" avec dedans des codes pour chaque sujet : C01, C02..., C15.
J'ai une colonne "performances" avec dedans des 0 ou des 1 selon que le test a été réussi ou non. Chaque sujet a réalisé le test 20 fois.
Je veux obtenir la moyenne des performances par individu. J'ai la formule pour un individu : mean(performances[nom=="C01"]) mais j'aimerai que ça se fasse d'un coup pour chacun des individus. Et s'il pouvait me le sortir dans un fichier txt, je ne serais pas contre.
Je sais qu'il faut utiliser la fonction "for" mais même avec l'aide du logiciel je n'y arrive pas.
Merci d'avance !
Margaux- Squatteurs
- Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007
Re: fonction "boucle" sous R
salut,
je maitrise mal ce type de programmation, mais je penserais à :
for(i in 1:ncol(nom))
mean(performances[nom=="C01"])
essaie et dis nous si ça fonctionne !!
je maitrise mal ce type de programmation, mais je penserais à :
for(i in 1:ncol(nom))
mean(performances[nom=="C01"])
essaie et dis nous si ça fonctionne !!
Re: fonction "boucle" sous R
Alors entre temps ma maitre de stage a cherché une solution et en a trouvé une qui fonctionne :
x<-list("C01","C02","C03","C04","C05","C06","C07","C08","C09","C10","C11","C12","C13","C14","C15")
for(i in 1:15)
+ print(mean(performances[nom==x[i]]))
J'ai quand même essayé la tienne Adrien mais ça ne fonctionne pas, il me répond :
Erreur dans 1:ncol(nom) : argument NA / NaN
x<-list("C01","C02","C03","C04","C05","C06","C07","C08","C09","C10","C11","C12","C13","C14","C15")
for(i in 1:15)
+ print(mean(performances[nom==x[i]]))
J'ai quand même essayé la tienne Adrien mais ça ne fonctionne pas, il me répond :
Erreur dans 1:ncol(nom) : argument NA / NaN
Margaux- Squatteurs
- Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007
Re: fonction "boucle" sous R
cool,
j'allais te dire de créer un vecteur numérique de "nom" ce qui revient je pense a la même chose que ta "list", mais ta version est plus propre.
Félicitation a ta maitre de stage pour la progra'.
j'allais te dire de créer un vecteur numérique de "nom" ce qui revient je pense a la même chose que ta "list", mais ta version est plus propre.
Félicitation a ta maitre de stage pour la progra'.
Re: fonction "boucle" sous R
salut,
j'arrive un peu tardivement mais d'un poitn de vue général, il faut apprendre petit à petit à se passer des boucles for autant que l'on peut car c'est très gourmand en ressource système du pc. THE méthode pour calculer n'importe quelle statistique selon les modalités d'un facteur reste la fonction tapply(). Avec tes données :
et pouf pouf en moins d'une demi-seconde, on a une moyenne par individu si on veut que R nous sorte l'écart type en plus on peut faire :
Ensuite on peut faire un seul tableau en faisant :
et un petit coup de la fonction write.table() pour exporter tout ça en .txt
nik
j'arrive un peu tardivement mais d'un poitn de vue général, il faut apprendre petit à petit à se passer des boucles for autant que l'on peut car c'est très gourmand en ressource système du pc. THE méthode pour calculer n'importe quelle statistique selon les modalités d'un facteur reste la fonction tapply(). Avec tes données :
- Code:
tapply(performances,nom,mean)
et pouf pouf en moins d'une demi-seconde, on a une moyenne par individu si on veut que R nous sorte l'écart type en plus on peut faire :
- Code:
tapply(performances,nom,function (x) x <- c(mean(x),sd(x)) )
Ensuite on peut faire un seul tableau en faisant :
- Code:
do.call("rbind",tapply(performances,nom,function (x) x <- c(mean(x),sd(x)) ))
et un petit coup de la fonction write.table() pour exporter tout ça en .txt
nik
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: fonction "boucle" sous R
Après la tempête c'est pas grave, c'est toujours bon à savoir pour la prochaine fois.
Donc :
Première formule : ça marche impec, c'est génial !
Deuxième formule : parait-il qu'il y aurait un symbole inattendu au niveau du "x <- "...
Troisième formule (en remplaçant l'intérieur par la 1ère formule qui fonctionnait bien) : "le second argument doit être une liste".
Bahou.
Donc :
Première formule : ça marche impec, c'est génial !
Deuxième formule : parait-il qu'il y aurait un symbole inattendu au niveau du "x <- "...
Troisième formule (en remplaçant l'intérieur par la 1ère formule qui fonctionnait bien) : "le second argument doit être une liste".
Bahou.
Margaux- Squatteurs
- Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007
Re: fonction "boucle" sous R
ça marche bien chez moi...:s
Si jamais tu es passé par un copié collé à partir du forum, il est possible qu'une histoire de format soit mal digéré par R.
Pour la dernière formule, si tu ne demande qu'une seule statistique, le tapply() te retourne un vecteur donc oui le do.call est inutile, un simple cbind() devrait suffir.
Si jamais tu es passé par un copié collé à partir du forum, il est possible qu'une histoire de format soit mal digéré par R.
Pour la dernière formule, si tu ne demande qu'une seule statistique, le tapply() te retourne un vecteur donc oui le do.call est inutile, un simple cbind() devrait suffir.
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
La Doua Dans l'Oeil :: Biologie :: Biométrie & Bioinformatique :: Questions & Débats :: Biostatistiques
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum