Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Construire boucle et fonction
4 participants
Page 1 sur 1
Construire boucle et fonction
Bonjour,
1 Boucle
Je m'initie aux boucles et fonctions. Pour m'exercer, j'ai voulu répéter le code suivant en 32 fois en variant la variable tablo$Date== 1 jusqu'à tablo$Date== 32.
2 Fonction
Je veux créer une fonction faisant une régression multiple avec interaction, au cas où la P-value<0.05, faire le test de Shapiro, et un qqplot. Pour cela j'ai essayé d'écrire cette fonction:
Merci d'avance pour votre orientation.
1 Boucle
Je m'initie aux boucles et fonctions. Pour m'exercer, j'ai voulu répéter le code suivant en 32 fois en variant la variable tablo$Date== 1 jusqu'à tablo$Date== 32.
- Code:
mean(tablo[tablo$Date==1,][tablo[tablo$Date==1,]$Site==1,]$FMC)
- Code:
for(i in 1:32){
a<-paste(mean(tablo[tablo$Date==1,][tablo[tablo$Date==1,]$Site==1,]$FMC))
print(a)
}
2 Fonction
Je veux créer une fonction faisant une régression multiple avec interaction, au cas où la P-value<0.05, faire le test de Shapiro, et un qqplot. Pour cela j'ai essayé d'écrire cette fonction:
- Code:
reg<-function(X,Y,Z)
{
reg<-lm(X~Y+Z)
summary(reg)
if (p-value>0.05)stop
reg$res
shapiro.test(reg$res)
qqnorm(reg$res)
return(reg)
}
Merci d'avance pour votre orientation.
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Construire boucle et fonction
Salut,
C'est bien de ce lancer dans le bain de la "programmation" dans R
Donc pour calculer la moyenne en faisant varier la date, il faut bien que ton i figure dans ta variable que tu veux faire évoluer (ta date) et que les valeurs prises par ce "i" aient un sens pour ta variable date. Du coup il faut :
Et pour finir, il ne faut pas utiliser la fonction print dans ta boucle sauf si tu veux vraiment voir s'afficher les résultats au fur et à mesure des passages de la boucle.
Dernière observation :
Regarde l'aide de la fonction subset() ou encore with() pour éviter les sélection du type [xxx$YYY==Z]
Nik
C'est bien de ce lancer dans le bain de la "programmation" dans R
- Code:
for(i in 1:32){
a<-paste(mean(tablo[tablo$Date==1,][tablo[tablo$Date==1,]$Site==1,]$FMC))
print(a)
}
C'est normal ton "i" n'est attribué nulle part. Quand tu écris "for i in 1:32" il faut bien comprendre que tu crées une variable "i" de longueur 1 qui va varier de 1 à 32.Cependant, j'ai comme résultat la moyenne de cette ligne qui est répétée 32 fois alors que je cherche à recopier le code 32 fois en variant tablo$Date de 1 à 32.
Donc pour calculer la moyenne en faisant varier la date, il faut bien que ton i figure dans ta variable que tu veux faire évoluer (ta date) et que les valeurs prises par ce "i" aient un sens pour ta variable date. Du coup il faut :
- Code:
paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==1,]$Site==1,]$FMC))
- Code:
a[i] <- paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==i,]$Site==1,]$FMC))
Et pour finir, il ne faut pas utiliser la fonction print dans ta boucle sauf si tu veux vraiment voir s'afficher les résultats au fur et à mesure des passages de la boucle.
- Code:
a <- NULL #crée un vecteur vide où on peut mettre ce qu'on veut
for(i in 1:32){
a[i] <- paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==1,]$Site==i,]$FMC))
}
Dernière observation :
- Code:
mean(tablo[tablo$Date==i,][tablo[tablo$Date==1,]$Site==1,]$FMC)
Regarde l'aide de la fonction subset() ou encore with() pour éviter les sélection du type [xxx$YYY==Z]
Nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
Bonjour Nik,
Je vous remercie pour le message détaillé. Je vais aussi consulter l'aide indiquée.
Pour répondre à votre dernière interpellation, c'est vrai le code est compliqué et ce que je sélectionnais c'est FMC en fonction de la Date et du site 1.
Une partie de ma table:
Merci encore
Je vous remercie pour le message détaillé. Je vais aussi consulter l'aide indiquée.
Pour répondre à votre dernière interpellation, c'est vrai le code est compliqué et ce que je sélectionnais c'est FMC en fonction de la Date et du site 1.
Une partie de ma table:
- Code:
Site Date FMC_mean EWT_mean FMC_sd EWT_sd Temp HR
1 1 1 164.30 264.60 36.3 63.3 45 28
2 1 2 149.40 226.70 33.0 65.3 36 46
3 1 3 144.90 168.10 28.0 54.1 38 45
4 1 4 111.10 130.60 28.2 32.4 38 36
5 1 5 109.80 144.90 12.5 52.8 43 29
- Code:
a <- NULL #crée un vecteur vide où on peut mettre ce qu'on veut
for(i in 1:32){
a[i] <- paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==i,]$Site==1,]$FMC))
}
Merci encore
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Construire boucle et fonction
Bonjour,
Je pense qu'avant de vouloir se lancer dans la création d'une boucle, il est préférable de tester si la formule écrite fonctionne pour le cas i=1.
J'ai utilisé le petit extrait du jeu de données que tu nous a fourni et j'ai simplement essayé de lancer la commande suivante dans R :
Et cela ne fonctionne pas
D'ailleurs, tu as mis "$FMC" dans ton code alors que dans l'extrait de ton jeu de données aucune variable ne porte le nom "FMC"...
A mon avis, tu devrais essayer de procéder autrement pour ta sélection de variables (d'ailleurs que cherches-tu exactement à sélectionner?), peut-être en passant par les fonction que t'as suggéré Nik.
Bonne continuation,
A.D.
Je pense qu'avant de vouloir se lancer dans la création d'une boucle, il est préférable de tester si la formule écrite fonctionne pour le cas i=1.
J'ai utilisé le petit extrait du jeu de données que tu nous a fourni et j'ai simplement essayé de lancer la commande suivante dans R :
- Code:
mean(tablo[tablo$Date==1,][tablo[tablo$Date==1,]$Site==1,]$FMC_mean)
Et cela ne fonctionne pas
D'ailleurs, tu as mis "$FMC" dans ton code alors que dans l'extrait de ton jeu de données aucune variable ne porte le nom "FMC"...
A mon avis, tu devrais essayer de procéder autrement pour ta sélection de variables (d'ailleurs que cherches-tu exactement à sélectionner?), peut-être en passant par les fonction que t'as suggéré Nik.
Bonne continuation,
A.D.
Re: Construire boucle et fonction
Bonjour A.D,
Merci pour l'intérêt que vous portez à ma question.
Vous avez raison, j'ai pas copié la bonne table, donc veuillez voir la table et le code utilisé pour calculer la première moyenne:
Merci encore
Merci pour l'intérêt que vous portez à ma question.
Vous avez raison, j'ai pas copié la bonne table, donc veuillez voir la table et le code utilisé pour calculer la première moyenne:
- Code:
Site Parcelle Date FMC EWT
1 1 A 1 108.1 240
2 1 B 1 162.6 283
3 1 C 1 201.1 183
4 1 D 2 222.4 278
5 1 E 2 176.1 280
6 2 A 1 248.5 256
7 2 B 1 469.2 502
8 2 C 1 273.0 486
9 2 D 2 223.8 367
10 2 A 2 300.0 165
mean(tablo[tablo$Date==1,][tablo[tablo$Date==1,]$Site==1,]$FMC)
Merci encore
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Construire boucle et fonction
Merci, cela fonctionne mieux avec ce jeu de données
Personnellement, j'ai testé le code suivant :
et cela fonctionn chez moi (NB: je n'ai fait tourner la boucle que pour i = 1 à 2 car dans l'extrait du jeu de données fourni il n'y a que les dates 1 et 2).
Cordialement,
A.D.
Personnellement, j'ai testé le code suivant :
- Code:
a <- NULL #crée un vecteur vide où on peut mettre ce qu'on veut
for(i in 1:2){
a[i] <- paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==i,]$Site==1,]$FMC))
}
et cela fonctionn chez moi (NB: je n'ai fait tourner la boucle que pour i = 1 à 2 car dans l'extrait du jeu de données fourni il n'y a que les dates 1 et 2).
Cordialement,
A.D.
Re: Construire boucle et fonction
Bonjour
Je vous remercie A.D. et Nik pour vos orientations. Ma première boucle sur R marche en utilisant le code:
Je vous remercie A.D. et Nik pour vos orientations. Ma première boucle sur R marche en utilisant le code:
- Code:
a <- NULL #crée un vecteur vide où on peut mettre ce qu'on veut
for(i in 1:32){
paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==i,]$Site==1,]$FMC))
a[i] <- paste(mean(tablo[tablo$Date==i,][tablo[tablo$Date==i,]$Site==1,]$FMC))
print(a[i])
}
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Construire boucle et fonction
Salut,
le
est inutile
cela permet juste d'afficher la valeur à l'écran mais pas de la récupérer.
le
- Code:
print(a[i])
est inutile
cela permet juste d'afficher la valeur à l'écran mais pas de la récupérer.
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
Bonjour Nik,
En fait, sans le
Si je vous comprends bien il ya un autre moyen de récupérer les résultats sans les copier car moi je les copie de mon écran pour coller sur un fichier.
Merci
En fait, sans le
- Code:
print(a[i])
Si je vous comprends bien il ya un autre moyen de récupérer les résultats sans les copier car moi je les copie de mon écran pour coller sur un fichier.
Merci
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Construire boucle et fonction
Pour afficher tes résultats dans la console il suffit de taper "a" puis valider et ça va t'afficher le contenu de l'objet a qui sera tes 32 valeurs.
Nik
Nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
Bonjour,
ici tu es typiquement dans le genre de cas ou une boucle ne sert à rien. Tu cherches à appliquer une fonction (la moyenne) à un objet (FMC) en fonction des modalités d'un facteur (Date) --> tapply.
De même A.D quand on connait la longueur final du vecteur de résultat, ici a, il vaut mieux l'initialiser directement avec cette longueur plutôt que de l'initialiser avec NULL. Par exemple ici on peut mettre a <- numeric(2) et dans la boucle mettre a[i] <- ... Ça raccourcit le temps de calcul, puisque tu ne recrées pas à chaque itération de la boucle l'objet a. Sur des petits calculs comme celui-ci la différence n'est pas visible mais lorsque tu as une boucle assez grande alors la tu verras la différence.
ici tu es typiquement dans le genre de cas ou une boucle ne sert à rien. Tu cherches à appliquer une fonction (la moyenne) à un objet (FMC) en fonction des modalités d'un facteur (Date) --> tapply.
- Code:
a <- with(tab[tab$Site==1,], tapply(FMC, Date, mean))
# ou encore pour que ça soit plus simple à comprendre :
a <- tapply(tab$FMC[tab$Site==1], tab$Date[tab$Site==1], mean)
De même A.D quand on connait la longueur final du vecteur de résultat, ici a, il vaut mieux l'initialiser directement avec cette longueur plutôt que de l'initialiser avec NULL. Par exemple ici on peut mettre a <- numeric(2) et dans la boucle mettre a[i] <- ... Ça raccourcit le temps de calcul, puisque tu ne recrées pas à chaque itération de la boucle l'objet a. Sur des petits calculs comme celui-ci la différence n'est pas visible mais lorsque tu as une boucle assez grande alors la tu verras la différence.
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Construire boucle et fonction
Merci pour la remarque droopy, c'est vrai que pour ce qui est du temps de calcul il est plus judicieux de créer initialement le vecteur à la taille souhaitée quand elle est connue.
Pour ma défense , c'est d'ailleurs ce que je fais la plupart du temps, mais là j'avais juste copié-collé le code de Komine.
Cordialement,
A.D.
Pour ma défense , c'est d'ailleurs ce que je fais la plupart du temps, mais là j'avais juste copié-collé le code de Komine.
Cordialement,
A.D.
Re: Construire boucle et fonction
Rappelons que Komine débute et n'en est pas encore à optimiser ses temps de calcul
Meme si l'exemple est mal choisi il faut bien comprendre comment marche les boucles
Meme si l'exemple est mal choisi il faut bien comprendre comment marche les boucles
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
Je suis d'accord avec toi et justement autant prendre les bons réflexes dès le début ! C'est beaucoup plus simple ensuite de les avoir en tête, que ce soit avec l'utilisation de la boucle ou la non utilisation de la boucle.Nik a écrit:Rappelons que Komine débute et n'en est pas encore à optimiser ses temps de calcul
Meme si l'exemple est mal choisi il faut bien comprendre comment marche les boucles
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Construire boucle et fonction
Si j'osais je te dirai de la boucler si tu me passes encore un de mes jeu de mot tout pourri !!!
:D:D
:D:D
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
qu'est-ce que tu veux on peut pas toujours avoir raison, de plus il est meilleur que le steak haché ...
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Construire boucle et fonction
e plus il est meilleur que le steak haché ...
Normal je m'améliore en vieillissant !
Que ceux qui ne comprennent rien se rassurent : on est en plein dans le message inutile de type défouloir
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Construire boucle et fonction
Bonjour,
Je note votre grand intérêt pour ma question. Je suis vraiment satisfait de vos réponses! J'ai connu R lors d'un court passage ne France mais je vois qu'il est à la fois difficile et intéressant.
Cordialement
Je note votre grand intérêt pour ma question. Je suis vraiment satisfait de vos réponses! J'ai connu R lors d'un court passage ne France mais je vois qu'il est à la fois difficile et intéressant.
Cordialement
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Sujets similaires
» dynamique des pop, boucle matrice et vecteur R
» Boucle d'histogramme
» calcul avec boucle
» Boucle de regression linéaire univarié
» Logiciel R : exporter des matrices d'une boucle for
» Boucle d'histogramme
» calcul avec boucle
» Boucle de regression linéaire univarié
» Logiciel R : exporter des matrices d'une boucle for
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum