fonction "boucle" sous R

Aller en bas

Re: fonction "boucle" sous R

Message  Margaux le Mar 12 Mai - 11:22

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 !

_________________
Master1 Physiologie et Neurosciences
UCB Lyon1
avatar
Margaux
Squatteurs
Squatteurs

Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  Adrien le Mar 12 Mai - 17:08

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 !!

_________________
Doctorant en Ecologie
UCB Lyon1
Administrateur
mon avatar est un Curculio nucum, balanin de la noisette, pour ceux qui ne l'aurait pas reconnu Wink
avatar
Adrien
Squatteurs
Squatteurs

Nombre de messages : 398
Age : 35
Niveau et domaine de formation : Doctorant Ecologie (LBBE)
Etablissement : UCB Lyon1
Date d'inscription : 08/10/2007

Voir le profil de l'utilisateur http://ladoua.exprimetoi.net

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  Margaux le Mer 13 Mai - 12:28

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

_________________
Master1 Physiologie et Neurosciences
UCB Lyon1
avatar
Margaux
Squatteurs
Squatteurs

Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  Adrien le Mer 13 Mai - 12:40

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'.

_________________
Doctorant en Ecologie
UCB Lyon1
Administrateur
mon avatar est un Curculio nucum, balanin de la noisette, pour ceux qui ne l'aurait pas reconnu Wink
avatar
Adrien
Squatteurs
Squatteurs

Nombre de messages : 398
Age : 35
Niveau et domaine de formation : Doctorant Ecologie (LBBE)
Etablissement : UCB Lyon1
Date d'inscription : 08/10/2007

Voir le profil de l'utilisateur http://ladoua.exprimetoi.net

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  nik le Jeu 21 Mai - 14:34

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 :

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
Bavard

Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  Margaux le Sam 23 Mai - 18:44

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 ! Very Happy
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. Crying or Very sad

_________________
Master1 Physiologie et Neurosciences
UCB Lyon1
avatar
Margaux
Squatteurs
Squatteurs

Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  nik le Dim 24 Mai - 23:57

ç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.

nik
Bavard
Bavard

Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: fonction "boucle" sous R

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum