R:中断循环

Posted

技术标签:

【中文标题】R:中断循环【英文标题】:R: Break for loop 【发布时间】:2011-08-30 06:32:28 【问题描述】:

你能否确认下一个 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,])
       
      
    

【问题讨论】:

如果您对此代码有疑问,请注意in 是保留字,因此您不能将其用作变量名。 【参考方案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,])
    

【讨论】:

非常感谢!我认为它是真的,它打破了。我的疑问主要是因为我正在比较两个数据帧与大约 30000 行并检查是否有新的数据行或删除的行。它需要几个小时才能完成工作。我正在用这样的循环来做这件事,它可能会做得更快吗?再次感谢您的宝贵帮助 你需要向量化你的逻辑。假设您有一个 1-10 vector = c(1:10) 的数字向量,并且您想从每个元素中减去 1。不要用for循环来做!只需执行以下vector = vector - 1。您将不得不重写所有内容并重新考虑您的逻辑。看看?apply 是你的好朋友。发布更多代码并使用可重现的数据,也许您可​​以获得更好的帮助。

以上是关于R:中断循环的主要内容,如果未能解决你的问题,请参考以下文章

具有高波特率循环缓冲器的 PIC 中断驱动 UART

单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。

Thread的中断机制(interrupt),循环线程停止的方法

中断事件循环后清理的正确方法是啥?

在执行期间中断循环时出错

使用while循环时未触发中断ISR