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-10vector = c(1:10)
的数字向量,并且您想从每个元素中减去 1。不要用for循环来做!只需执行以下vector = vector - 1
。您将不得不重写所有内容并重新考虑您的逻辑。看看?apply
是你的好朋友。发布更多代码并使用可重现的数据,也许您可以获得更好的帮助。以上是关于R:中断循环的主要内容,如果未能解决你的问题,请参考以下文章
单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。