R: Разрыв для цикла
Вы можете подтвердить, отменяет ли следующий разрыв внутренний цикл?
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,])
}
}
}
Ответы
Ответ 1
Ну, ваш код не воспроизводится, поэтому мы никогда не знаем наверняка, но это то, что help('break')
говорит:
break вырывается из поля for, while или цикл повторения; контроль переносится на первое утверждение вне внутренний цикл.
Итак, да, 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
}
}
}
Ответ 2
ваш оператор 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,])
}
}