2017-03-13 15 views
1

条件に基づいてforループ内の反復をスキップしたいと思います。私はそれが条件に基づいてforループのいくつかの繰り返しをスキップ

1 
4 

を返すようにしたいでしょう

for(i in 1:10){ 
    if(i %in% c(1,2,3,4,5)){ 
    print(i) 
    i <- i+2} 
} 

ではなく、それはなぜこれが起こっている私は承知しています

1 
2 
3 
4 
5 

返します。直感的に私はこれが働くだろうと思いました。

Rのforループの条件に基づいて(複数の)反復をスキップする別の方法はありますか?

+0

次のように直接何かをすると間違って何? 'for(i in 1:10){ if(%i%c(1,4)){ print(i)} }'です。あなたのコードがうまくいかない理由は、 'i < - i + 2'を使うことによってforループで' i'を実際に更新していないからです。 –

+2

ループ内のforループインデックスをインクリメントするのは悪い習慣です。物事を追跡することを非常に混乱させます。 'while()'を使用してループ内でインクリメントするか、 'for()'を使い、手でインクリメントしないでください。またはより良い(特にR):ベクトル化するコード –

+0

コメントありがとう! –

答えて

-1

は確かに、@a P O M「sのコメント以下、ソリューションは、すべての後に非常に簡単だった:

i <- 1 
while(i <= 10){ 
    if(i %in% c(1,2,3,4,5)){ 
    print(i) 
    i <- i+2} 
    i <- i+1 
} 

は、私はそれについて自分自身を考えていなかったと信じてすることはできません!

2

Rのループ内でカウンタをインクリメントするのは悪いことではありません。単純に機能しません。それは言語が構築される方法ではありません。 1と4を印刷する場合は、次のように試してみてください。

for(i in seq(1,10,by=3)){ 
    if(i %in% c(1,2,3,4,5)){ 
    print(i) 
    } 
} 

for-loopsは実際にはNULLを返します。コンソールに印刷するという副作用がありますが、変数の値は変更されません。値を変更したい場合は、ループ内で代入を行う必要があります。

ザ・がnext制御文です:

for(i in seq(1,10)){ 
    if(!(i %in% c(1,4))){ next } 
    print(i) 
} 
+0

これはこの小さな例では機能しますが、実際の問題では機能しません。条件に基づいて反復をスキップする必要があり、これらの条件が満たされているかどうかは事前にわかりません。 –

+3

次のループイテレータにスキップできる 'next'制御文があります。 'for'と' next文のヘルプページを見つけるには '? 'for''と打ちます –

関連する問題