2016-09-18 118 views
-3

条件が満たされたときに、i変数を手動で増やそうとしています。R:forループ内のインクリメント変数をインクリメントする方法は?

デバッグする場合、(I < -i + 2)ラインは間違いなく実行されている
for(i in 1:x){ 
    if(condition){ 
     i <- i + 2 
     } 
    } 

、代わりにラインから3(+2からの追加の+1のI 1によってまだだけインクリメントし、自動インクリメント)

ループ内にどのように増分できますか?

+0

なぜfor(i in 1:x)の代わりに 'while(i <= x)'を使わないのですか? – tomaz

+3

これをサポートする言語でもこれを行うことは非常に悪い習慣です。 'repeat'または' while'は、複数の場所でループを変更することを予定している場合、より良いイディオムです。もしあなたがこのコードに戻ると、あなたの将来の自己も非常に感謝します。 Colinのコードは、シーケンス全体を繰り返し処理するが、別の変数を変更する必要がある場合に適しています。 'for'イディオムでの契約からの脱却は良い考えではありません。 – hrbrmstr

答えて

0

ループを実行すると、変数iの値がtmp*に格納されます。つまり、ループの先頭に達すると、iがリセットされます。あなたが望む結果を得るために

for(i in 1:2){ 
    message(i) 
    i <- 10 
    message(i) 
} 
#1 
#10 
#2 
#10 

、あなたのようなものかもしれない例えば:

k =1 
for(i in 1:10){ 
    if(condition) k <- k + 2 
} 
-1
for(i in seq(0, 10, 2)){ 
    print(i) 
} 

を、あなたはこれを行うことができます。..

+0

OPが望んでいることをすることにも近くない。彼は条件が必要です –

2

をだから、基本的にあなたは、いくつかのループをスキップしたいです条件に基づく反復。それは正当に悩まされるデザインの選択ですが、もし必要ならばnextが必要です。次のコードは、第三5,7の繰り返しスキップ:

for(i in 1:10){ 
    if(i %in% c(3,5,7)){ 
    next 
    } 
    print(i) 
} 

をあなたは、あなたがあなたがステップ数をスキップすることができます一時的な変数を使用することができ、特定の条件に基づいて3でインクリメントする必要があると言います。

skip <- 0 # the temporary variable helping us keeping track of the iterations 
for(i in 1:10){ 
    if(i == 5){ # the condition that causes the skip 
    skip <- 3 
    } 
    if(skip > 0){ # the control that skips as long as necessary 
    skip <- skip - 1 
    next 
    } 
    print(i) 
} 
0

シーケンスが作成されたら、あなたはかなりのループを制御の多くを失う:これは、すべての反復を通過しない、それだけの時間に繰り返しの勃発ことに注意してください。このような場合、私はそれをwhileループに変更してから、ループの最後に条件付きの増分/減分を行います。

関連する問題