10
votes

changer d'index de boucle dans la boucle

Je suis relativement nouveau à R. Je suis itération sur un vecteur dans R en utilisant la boucle (). Cependant, sur la base d'une certaine condition, je dois sauter des valeurs dans le vecteur. La première pensée qui vient à l'esprit est de changer l'index de boucle dans la boucle. J'ai essayé ça, mais c'est d'une manière ou d'une autre chose ne pas le changer. Il doit y avoir un peu de quoi y atteindre dans R.

Merci d'avance. Sami


4 commentaires

Sami - pouvez-vous poster des données d'exemple?


S'il vous plaît donnez-nous un exemple de code ...


Cela change probablement l'index dans la boucle, mais la valeur modifiée ne change pas l'indexation de la prochaine passe. L'indexation au niveau de contrôle n'est pas affectée par votre altération locale de la variable d'index.


D'accord des exemples, je pense qu'il est clair que vous ne pouvez pas changer l'index de boucle dans la boucle. Je suppose que je devrais utiliser "tandis que" boucle. Mais merci pour les réponses quand même.


4 Réponses :


2
votes

Sans exemple, il est difficile de voir ce que vous voulez faire, mais vous pouvez toujours utiliser une déclaration IF à l'intérieur d'une boucle pour la boucle:

foo <- 1:10*5
for (i in seq(length(foo)))
{
 if (foo[i] != 15) print(foo[i])
}


0 commentaires

16
votes

Vous pouvez changer l'index de boucle dans A pour boucle, mais cela n'affectera pas l'exécution de la boucle; Voir la section Détails de ? "pour" code>: xxx pré>

Utilisez plutôt une boucle tandis que et indexez manuellement: p>

i <- 1
while(i < 100) {
  # do stuff
  if(condition) {
    i <- i+3
  } else {
    i <- i+1
  }
}


2 commentaires

Vous peut modifier la variable d'index dans une boucle pour boucle, mais elle ne "restera pas".


@DWIN: D'accord. Je voulais dire "changement" dans le sens de la puissance des valeurs souhaitées - sauter des valeurs.



2
votes

in r, les altérations locales de la variable d'index sont "corrigées" avec la passe suivante: xxx

puisque vous avez un critère de sauter, vous devez appliquer le critère au vecteur de la boucle à l'intérieur du par-parenthèses. E.g: xxx


1 commentaires

Sauter via le SEQ L'argument de la boucle pour la boucle suppose que vous avez priori, savez quels éléments à sauter. Si tel est le cas, vous pourrez peut-être utiliser une solution vectorisée et sauter complètement la boucle.



9
votes

regarder xxx

la commande suivant va ignorer le reste de l'itération actuelle de la boucle et commencer la suivante. Cela peut accomplir ce que vous voulez.


0 commentaires