条件が満たされたときに、i変数を手動で増やそうとしています。R:forループ内のインクリメント変数をインクリメントする方法は?
デバッグする場合、(I < -i + 2)ラインは間違いなく実行されているfor(i in 1:x){
if(condition){
i <- i + 2
}
}
、代わりにラインから3(+2からの追加の+1のI 1によってまだだけインクリメントし、自動インクリメント)
ループ内にどのように増分できますか?
条件が満たされたときに、i変数を手動で増やそうとしています。R:forループ内のインクリメント変数をインクリメントする方法は?
デバッグする場合、(I < -i + 2)ラインは間違いなく実行されているfor(i in 1:x){
if(condition){
i <- i + 2
}
}
、代わりにラインから3(+2からの追加の+1のI 1によってまだだけインクリメントし、自動インクリメント)
ループ内にどのように増分できますか?
ループを実行すると、変数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
}
for(i in seq(0, 10, 2)){
print(i)
}
を、あなたはこれを行うことができます。..
OPが望んでいることをすることにも近くない。彼は条件が必要です –
をだから、基本的にあなたは、いくつかのループをスキップしたいです条件に基づく反復。それは正当に悩まされるデザインの選択ですが、もし必要ならば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)
}
シーケンスが作成されたら、あなたはかなりのループを制御の多くを失う:これは、すべての反復を通過しない、それだけの時間に繰り返しの勃発ことに注意してください。このような場合、私はそれをwhileループに変更してから、ループの最後に条件付きの増分/減分を行います。
なぜfor(i in 1:x)の代わりに 'while(i <= x)'を使わないのですか? – tomaz
これをサポートする言語でもこれを行うことは非常に悪い習慣です。 'repeat'または' while'は、複数の場所でループを変更することを予定している場合、より良いイディオムです。もしあなたがこのコードに戻ると、あなたの将来の自己も非常に感謝します。 Colinのコードは、シーケンス全体を繰り返し処理するが、別の変数を変更する必要がある場合に適しています。 'for'イディオムでの契約からの脱却は良い考えではありません。 – hrbrmstr