web-dev-qa-db-ja.com

R:ループの中断

次のブレークで内部forループがキャンセルされるかどうかを確認できますか?

   for (out in 1:n_old){

     id_velho <- old_table_df$id[out]
      for (in in 1:n)
      {
       id_novo <- new_table_df$ID[in]
       if(id_velho==id_novo)
       {
        break
       }else 
       if(in == n)
       {
       sold_df <- rbind(sold_df,old_table_df[out,])
       }
      }
    }
56
Rui Morais

あなたのコードは再現可能ではないので、私たちは確実に知ることはできませんが、これはhelp('break')saysです:

breakは、for、while、またはrepeatループから抜け出します。制御は、最も内側のループの外側の最初のステートメントに転送されます。

はい、breakは現在のループのみを中断します。また、実際にそれを見ることができます:

for (i in 1:10)
{
    for (j in 1:10)
    {
        for (k in 1:10)
        {
            cat(i," ",j," ",k,"\n")
            if (k ==5) break
        }   
    }
}   
91
Sacha Epskamp

breakステートメントはfor (in in 1:n)から抜け出します。

個人的には、breakステートメントに常に警戒しており、コンソールに印刷して、実際に正しいループから抜け出していることを再確認することにより、それを再確認します。したがって、テストする前に次のステートメントを追加します。これにより、最後に到達する前にブレークした場合に通知されます。ただし、変数nをどのように処理しているかわからないので、それが役立つかどうかはわかりません。 nに到達する前にブレークアウトするかどうかを事前に知っているテスト値をnにします。

for (in in 1:n)
{
    if (in == n)         #add this statement
    {
        "sorry but the loop did not break"
    }

    id_novo <- new_table_df$ID[in]
    if(id_velho==id_novo)
    {
        break
    }
    else if(in == n)
    {
        sold_df <- rbind(sold_df,old_table_df[out,])
    }
}
23
msikd65