Modérateur : Groupe des modérateurs
J’ai besoin de fixer plusieurs paramètres, et je voulais donc utiliser « for » pour cela. Par exemple, si on prend une expression toute simple :
for (n in 1:nrow(srt3)) {Q=sum(srt3[1:n,1]*srt3[1:n,2])}
ça marche très bien.
Code : Tout sélectionner
sum( srt3[,1] * srt3[,2] )
ça marche très bien.
J’ai vu qu’il était possible de combiner à la suite plusieurs « for », du genre :
for (n in 1:nrow(srt3)) {for (k in 1:ncol(srt3)) Q=sum(srt3[1:n,1:k]*srt3[1:n,1:k])}
Mais lorsque je veux utiliser cette syntaxe pour préciser une valeur (par exemple, si je veux dire « pour les valeurs de la 2eme colonne de srt3 > 3), ça ne marche plus… J’ai essayé plusieurs formulations, mais rien n’y fait… Par exemple,
for (n in 1:nrow(srt3)) {for (srt3[1 :n,2] >3) Q=sum(srt3[1:n,1:k]*srt3[1:n,1:k])}
ne fonctionne pas…
Pourriez vous m’aider s’il vous plaît ? Je n’ai trouvé sur internet aucune explication sur les syntaxes imbriquées, et je suis complètement bloquée…
Heeeeeeeeeelp !
Merci beaucoup par avance
Céline
Code : Tout sélectionner
srt3[,2] < 3
srt3[ srt3[,2] < 3 , ]
Code : Tout sélectionner
for(n in 1:nrow(srt3))
for(srt3[1:n, 2] > 3)
Q <- sum(srt3[1:n, 1:k] * srt3[1:n, 1:k])
Code : Tout sélectionner
srt3[1:n, 2] > 3
Code : Tout sélectionner
Q <- vector(mode = "numeric", length = nrow(srt3))
for(n in 1:nrow(srt3))
Q[n] <- sum(srt3[srt3[1:n, 2] > 3 , ]^2)
Code : Tout sélectionner
Q <- cumsum(srt3[srt3[ , 2] > 3 , ]^2)
Code : Tout sélectionner
srt3 <- matrix(rnorm(20,3,1),10,2)
srt3
[,1] [,2]
[1,] 3.967942 3.754213
[2,] 1.946929 3.399120
[3,] 2.141729 2.371613
[4,] 1.830191 2.142292
[5,] 2.045582 1.842223
[6,] 2.709870 2.713192
[7,] 1.464278 1.668538
[8,] 2.874854 1.671262
[9,] 1.756746 3.054997
[10,] 3.147519 3.509496
# tu peux récupérer l'info comme ça :
which(srt3[,2]>3)
[1] 1 2 9 10
# et la tu as les numéros des lignes pour lesquelles ta condition est vérifiée
#et faire ta boucle la dessus :
for (n in which(srt3[,2]>3)){
Code : Tout sélectionner
srt3red <- srt3[which(srt3[,2]>3),]
# ou encore
srt3red <- srt3[srt3[,2]>3,]
for (n in 1:nrow(srt3red)){
for (k in 1:ncol(srt3red))
Q=sum(srt3red[1:n,1:k]*srt3red[1:n,1:k])
}
Code : Tout sélectionner
for (n in 1:length(which(srt3[,2]>3))){
for (k in 1:ncol(srt3))
Q=sum(srt3[srt3[,2]>3,][1:n,1:k]*srt3[srt3[,2]>3,][1:n,1:k])
}
Code : Tout sélectionner
for (I in 1:max(IDP))
+ + + + + for (n in min(niv1): max(niv1))
+ + + + + for (k in 1:nrow(srt))
+ + + + + {f5$Hcor[f5$IDP==I & f5$niv==n]=f5$Hobs[f5$IDP==I & f5$niv==n]-sum(srt[k,"sr"]*f5$Hobs[f5$IDP==I & f5$niv==n+(srt[k,"Nums"])])}
Code : Tout sélectionner
for (i in 1:nrow(f5)){
f5$cor[i] <- f5$obs[i]-sum(srt$sr*f5$obs[f5$niv==(f5$niv[i]+srt$num)])
}
Code : Tout sélectionner
IDP niv Hobs Hcor
46 5 160 0.0476486 0.000000000
45 5 159 0.0000000 0.000000000
66 6 169 0.0000000 0.000000000
65 6 168 0.0000000 0.000000000
64 6 167 0.0000000 0.000000000
63 6 166 0.0000000 0.000000000
62 6 165 0.0000000 0.000000000
61 6 164 0.0000000 0.000000000
60 6 163 0.0000000 0.000000000
59 6 162 0.0000000 0.000000000
58 6 161 0.0000000 0.000000000
57 6 160 0.9170650 0.000000000
56 6 159 0.1104400 0.000000000
77 7 169 0.6584370 0.000000000
76 7 168 0.0000000 0.000000000
75 7 167 0.0000000 0.000000000
74 7 166 0.0384363 0.000000000
73 7 165 0.0000000 0.000000000
72 7 164 0.0000000 0.000000000
71 7 163 0.3239430 0.000000000
70 7 162 0.0000000 0.000000000
69 7 161 0.0000000 0.000000000
68 7 160 0.3511630 0.000000000
67 7 159 0.0000000 0.000000000
Code : Tout sélectionner
sr Nums
[1,] 0.1444 1
[2,] 0.0619 3
Code : Tout sélectionner
> f5 <- f5[order(f5$IDP, f5$niv), ]
> f5
IDP niv Hobs Hcor
2 5 159 0.0000000 0
1 5 160 0.0476486 0
13 6 159 0.1104400 0
12 6 160 0.9170650 0
11 6 161 0.0000000 0
10 6 162 0.0000000 0
9 6 163 0.0000000 0
8 6 164 0.0000000 0
7 6 165 0.0000000 0
6 6 166 0.0000000 0
5 6 167 0.0000000 0
4 6 168 0.0000000 0
3 6 169 0.0000000 0
24 7 159 0.0000000 0
23 7 160 0.3511630 0
22 7 161 0.0000000 0
21 7 162 0.0000000 0
20 7 163 0.3239430 0
19 7 164 0.0000000 0
18 7 165 0.0000000 0
17 7 166 0.0384363 0
16 7 167 0.0000000 0
15 7 168 0.0000000 0
14 7 169 0.6584370 0
>
> srt
sr Nums
[1,] 0.1444 1
[2,] 0.0619 3
Code : Tout sélectionner
> Liste <- by(f5, list(IDP = f5$IDP), function(x){
+ for(i in seq(nrow(x))){
+ if(sum(x$niv == (x$niv[i] + srt[,"Nums"][1])) == 1 & sum(x$niv == (x$niv[i] + srt[,"Nums"][2])) == 1)
+ x$Hcor[i] <- x$Hobs[i] - (srt[,"sr"][1] * x$Hobs[x$niv == x$niv[i] + srt[,"Nums"][1]] +
srt[,"sr"][2] * x$Hobs[x$niv == x$niv[i] + srt[,"Nums"][2]])
+ else
+ x$Hcor[i] <- NA
+ }
+ x
+ })
Code : Tout sélectionner
> Liste
IDP: 5
IDP niv Hobs Hcor
2 5 159 0.0000000 NA
1 5 160 0.0476486 NA
---------------------------------------------------------------------------------------------------------------------
IDP: 6
IDP niv Hobs Hcor
13 6 159 0.110440 -0.02198419
12 6 160 0.917065 0.91706500
11 6 161 0.000000 0.00000000
10 6 162 0.000000 0.00000000
9 6 163 0.000000 0.00000000
8 6 164 0.000000 0.00000000
7 6 165 0.000000 0.00000000
6 6 166 0.000000 0.00000000
5 6 167 0.000000 NA
4 6 168 0.000000 NA
3 6 169 0.000000 NA
---------------------------------------------------------------------------------------------------------------------
IDP: 7
IDP niv Hobs Hcor
24 7 159 0.0000000 -0.050707937
23 7 160 0.3511630 0.331110928
22 7 161 0.0000000 0.000000000
21 7 162 0.0000000 -0.046777369
20 7 163 0.3239430 0.321563793
19 7 164 0.0000000 0.000000000
18 7 165 0.0000000 -0.005550202
17 7 166 0.0384363 -0.002320950
16 7 167 0.0000000 NA
15 7 168 0.0000000 NA
14 7 169 0.6584370 NA
Code : Tout sélectionner
> do.call("rbind", Liste)
IDP niv Hobs Hcor
5.2 5 159 0.0000000 NA
5.1 5 160 0.0476486 NA
6.13 6 159 0.1104400 -0.021984186
6.12 6 160 0.9170650 0.917065000
6.11 6 161 0.0000000 0.000000000
6.10 6 162 0.0000000 0.000000000
6.9 6 163 0.0000000 0.000000000
6.8 6 164 0.0000000 0.000000000
6.7 6 165 0.0000000 0.000000000
6.6 6 166 0.0000000 0.000000000
6.5 6 167 0.0000000 NA
6.4 6 168 0.0000000 NA
6.3 6 169 0.0000000 NA
7.24 7 159 0.0000000 -0.050707937
7.23 7 160 0.3511630 0.331110928
7.22 7 161 0.0000000 0.000000000
7.21 7 162 0.0000000 -0.046777369
7.20 7 163 0.3239430 0.321563793
7.19 7 164 0.0000000 0.000000000
7.18 7 165 0.0000000 -0.005550202
7.17 7 166 0.0384363 -0.002320950
7.16 7 167 0.0000000 NA
7.15 7 168 0.0000000 NA
7.14 7 169 0.6584370 NA
Retourner vers « Questions en cours »
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité