我想创建一个lapply循环,如果满足某个要求,它将停止...
举个例子:
score <- 0
lapply(1:100, function(z){
score <<- score + 1
if(score >=10){
break
}
})
但是,在lapply循环中没有停止参数作为 break / pass 。
我知道这个例子听起来很愚蠢。但是,原始代码有太多的依赖关系,很容易理解...... 我的原始循环每次都从一个对象向量中移除一个项目,但是,如果没有其他东西可以从中删除它可以停止。 我在正常的循环短尺寸函数中获得至少0.10秒
> time <- system.time({cyclopeptide_score(sequence, spectrum)})
> time
usuário sistema decorrido
6.58 0.00 6.58
> time <- system.time({cyclopeptide_score2(sequence, spectrum)})
> time
usuário sistema decorrido
6.72 0.00 6.72
答案 0 :(得分:4)
要直接回答您的问题,这里有一个选项(假设您可以控制lapply
发生的代码以及正在应用的函数):
withRestarts(
lapply(
1:10,
function(x) {
cat(x)
if(x > 5) invokeRestart("stopLoop")
} ),
stopLoop=function() message("Loop Stopped")
)
产地:
123456
Loop Stopped
基本上,withRestarts
/ invokeRestart
有点像GOTO语句,它允许你突破循环。
所有这一切都表示,我不会将任何大代码重构工作基于6.7秒运行时间的0.1秒改进。
另外,如果您可以执行上述操作,您可以轻松地将代码转换为for
循环,这似乎更合适,因为您希望a)打破循环,b)使用<<-
运算符导致副作用。