web-dev-qa-db-fra.com

R: pause pour boucle

Pouvez-vous confirmer si la prochaine pause annule la boucle for interne?

   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

Eh bien, votre code n’est pas reproductible, nous ne le savons donc jamais, mais voici ce que help('break') dit:

break rompt une boucle for, while ou repeat; le contrôle est transféré à la première instruction en dehors de la boucle la plus interne.

Alors oui, break ne rompt que la boucle actuelle. Vous pouvez également le voir en action avec par exemple:

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

votre instruction break doit sortir de la for (in in 1:n).

Personnellement, je suis toujours méfiant avec les énoncés de casse et revérifie en imprimant sur la console pour vérifier que je suis en train de sortir de la bonne boucle. Donc, avant de tester, ajoutez la déclaration suivante, qui vous permettra de savoir si vous vous arrêtez avant la fin. Cependant, je n'ai aucune idée de la façon dont vous gérez la variable n alors je ne sais pas si cela vous serait utile. Faites un n une valeur de test où vous savez d'avance si elle est supposée éclater ou non avant d'atteindre 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