Estoy buscando una manera de terminar una función de aplicar temprano en alguna condición. Utilizando un bucle, algo así como:Terminar una función basada en la aplicación anticipadamente (¿similar a romper?)
FDP_HCFA = function(FaultMatrix, TestCosts, GenerateNeighbors, RandomSeed) {
set.seed(RandomSeed)
## number of tests, mind the summary column
nT = ncol(FaultMatrix) - 1
StartingSequence = sample(1:nT)
BestAPFD = APFD_C(StartingSequence, FaultMatrix, TestCosts)
BestPrioritization = StartingSequence
MakingProgress = TRUE
NumberOfIterations = 0
while(MakingProgress) {
BestPrioritizationBefore = BestPrioritization
AllCurrentNeighbors = GenerateNeighbors(BestPrioritization)
for(CurrentNeighbor in AllCurrentNeighbors) {
CurrentAPFD = APFD_C(CurrentNeighbor, FaultMatrix, TestCosts)
if(CurrentAPFD > BestAPFD) {
BestAPFD = CurrentAPFD
BestPrioritization = CurrentNeighbor
break
}
}
if(length(union(list(BestPrioritizationBefore),
list(BestPrioritization))) == 1)
MakingProgress = FALSE
NumberOfIterations = NumberOfIterations + 1
}
}
me gustaría volver a escribir esta función utilizando alguna derivación de apply
. En particular, terminar la evaluación de la primera persona con una mejor forma física, evitando así el costo de considerar al resto de la población.
Es posible que pueda utilizar alguna combinación de signalCondition/tryCatch/etc., Pero parece complicado. Yo haría una segunda pregunta de JoshUlrich. –
-1 para publicar código que no es reproducible y tiene un error de sintaxis. –
Lo siento, solo intentaba dar una idea general de lo que estaba buscando, pensé que el fragmento sería suficiente. – user602319