R:打破循环

Rui*_*ais 57 for-loop r break

你能确认下一次突破是否取消内部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,])
       }
      }
    }
Run Code Online (Sandbox Code Playgroud)

Sac*_*amp 91

那么你的代码是不可重现的,所以我们永远不知道,但这help('break')就是说:

中断,重复循环,重复循环; 控制转移到最内层循环之外的第一个语句.

所以是的,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
        }   
    }
}   
Run Code Online (Sandbox Code Playgroud)


msi*_*d65 23

你的休息声明应该突破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,])
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你需要对你的逻辑进行矢量化.假设你有一个数字为1-10`veve = c(1:10)`的向量,你想从每个元素中减去1.不要用for循环来做!只需简单地执行以下`vector = vector - 1`.你将不得不重写所有内容并重新思考你的逻辑.看看`?apply`这是你的好朋友.发布更多代码并使用可重现的数据,您可以获得更好的帮助. (3认同)