faire en mise en boucle R
Question
Je me demandais comment écrire-faire en style boucle?
J'ai trouvé ce poste :
vous pouvez utiliser la répétition {} et vérifier les conditions whereever utilisant if () et sortir de la boucle avec le mot de commande « d'arrêt ».
Je ne suis pas sûr de ce qu'il veut dire exactement. Quelqu'un peut-il expliquer s'il vous plaît si vous comprenez et / ou si vous avez une autre solution?
La solution
Assez explicite.
repeat{
statements...
if(condition){
break
}
}
Ou quelque chose comme ça, je pense. Pour obtenir l'effet de la faire en boucle, vérifiez simplement votre état à la fin du groupe des états.
Autres conseils
Voir ?Control
ou R Langue Définition:
> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
do_while
n'existe pas comme une construction séparée en R, mais vous pouvez simuler avec:
repeat( { expressions}; if (! end_cond_expr ) {break} )
Si vous souhaitez voir la page d'aide que vous ne pouvez pas saisir ?while
ou ?repeat
à la console, mais plutôt besoin d'utiliser ?'repeat'
ou ?'while'
. Tous les « contrôle-constructions », y compris if
sont sur la même page et tout caractère nécessaire de citer après le « ? » si l'interprète ne les voit pas comme un code incomplet et vous donner une suite « + ».
Sur la base des autres réponses, je voulais partager un exemple d'utilisation de la boucle en construction pour réaliser un do-tout comportement. En utilisant une variable booléenne simple dans l'état tout (initialisé à TRUE), puis vérifier notre état réel plus tard dans l'instruction if. On pourrait aussi utiliser un mot-clé break au lieu de continuer <- FAUX dans l'instruction if (probablement plus efficace).
df <- data.frame(X=c(), R=c())
x <- x0
continue <- TRUE
while(continue)
{
xi <- (11 * x) %% 16
df <- rbind(df, data.frame(X=x, R=xi))
x <- xi
if(xi == x0)
{
continue <- FALSE
}
}
Remarquant que l'utilisateur 42 de-approche parfaite {
* « Faire pendant » = « répéter jusqu'à ne pas »
* L'équivalence de code:
do while (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
} n'a pas reçu assez d'attention aux autres, je vais mettre en relief et faire avancer son approche par un exemple concret. Si l'on ne nie pas la condition do-while (via !
ou en prenant la négation), puis situations déformées (1. Valeur persistance 2. boucle infinie) existent en fonction du cours du code.
Dans Gauss:
proc(0)=printvalues(y);
DO WHILE y < 5;
y+1;
y=y+1;
ENDO;
ENDP;
printvalues(0); @ run selected code via F4 to get the following @
1.0000000
2.0000000
3.0000000
4.0000000
5.0000000
R
printvalues <- function(y) {
repeat {
y=y+1;
print(y)
if (! (y < 5) ) {break} # Negation is crucial here!
}
}
printvalues(0)
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5
toujours insister pour que, sans la négation de la condition do-temps, la réponse de Salcedo est erroné. On peut le vérifier par la suppression symbole de négation dans le code ci-dessus.