¿Cómo puedo agotar el tiempo de espera cuando un elemento de la lista falla o tarda demasiado?

Para varios esfuerzos en los que estoy involucrado en este momento, estoy ejecutando grandes conjuntos de datos con numerosas combinaciones de parámetros a través de una serie de funciones. Las funciones tienen una envoltura (por lo que puedomclapply) para facilitar la operación en un clúster. Sin embargo, me encuentro con dos grandes desafíos.

a) Mis combinaciones de parámetros son grandes (piense 20k a 100k). A veces combinaciones particularesserá falla (por ejemplo, la supervivencia es demasiado alta y la mortalidad es demasiado baja, por lo que el modelo nunca converge como un escenario hipotético). Es difícil para mí saber de antemano qué combinaciones van a fallar (la vida sería más fácil si pudiera hacerlo). Pero por ahora tengo este tipo de configuración:

failsafe <- failwith(NULL, my_wrapper_function)
# This is what I run
# Note that input_variables contains a list of variables in each list item
results <-  mclapply(input_variables, failsafe, mc.cores = 72)
# On my local dual core mac, I can't do this so the equivalent would be:
results <-  llply(input_variables, failsafe,  .progress = 'text')

El esqueleto de mi función de envoltura se ve así:

my_wrapper_function <- function(tlist) {
    run <- tryCatch(my_model(tlist$a, tlist$b, tlist$sA, tlist$Fec, m = NULL) , error=function(e) NULL)
...
return(run)
}

¿Es este el enfoque más eficiente? Si por alguna razón una combinación particular de variables falla el modelo, lo necesito para devolver unNULL y seguir con el resto. Sin embargo, todavía tengo problemas que esto falla menos que con gracia.

b) A veces una cierta combinación de entradas.no Choque el modelo pero lleva demasiado tiempo para converger. Establecí un límite en el tiempo de cálculo en mi grupo (por ejemplo, 6 horas) para no desperdiciar mis recursos en algo que está atascado. ¿Cómo puedo incluir un tiempo de espera tal que, si una llamada a la función toma más de x tiempo en un solo elemento de la lista, debería continuar? Calcular el tiempo empleado es trivial, pero una función de simulación media no se puede interrumpir para verificar el tiempo, ¿verdad?

Cualquier idea, soluciones o trucos son apreciados!

Respuestas a la pregunta(1)

Su respuesta a la pregunta