Jak przekroczyć limit czasu, gdy element listy nie działa lub trwa zbyt długo?

W związku z kilkoma wysiłkami, w które jestem obecnie zaangażowany, używam dużych zbiorów danych z wieloma kombinacjami parametrów poprzez szereg funkcji. Funkcje mają wrapper (więc mogęmclapply) dla ułatwienia działania na klastrze. Jednak napotykam na dwa główne wyzwania.

a) Moje kombinacje parametrów są duże (od 20 do 100 tys.). Czasami poszczególne kombinacjebędzie nie powiodło się (np. przeżycie jest zbyt wysokie, a śmiertelność jest zbyt niska, więc model nigdy nie zbiega się jako hipotetyczny scenariusz). Trudno mi wykręcić się przed czasem, które kombinacje zawiodą (życie byłoby łatwiejsze, gdybym mógł to zrobić). Ale na razie mam tego typu konfigurację:

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')

Szkielet mojej funkcji opakowania wygląda tak:

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)
}

Czy to jest najbardziej efektywne podejście? Jeśli z jakiegoś powodu określona kombinacja zmiennych powoduje zawieszenie modelu, muszę go zwrócićNULL i kontynuuj resztę. Nadal jednak mam problemy, które zawodzą mniej niż z wdziękiem.

b) Czasami pewna kombinacja danych wejściowychnie zawieść model, ale zbyt długo się zbiega. Ustawiłem limit czasu obliczeń na moim klastrze (powiedzmy 6 godzin), więc nie marnuję zasobów na coś, co utknęło. Jak mogę włączyć limit czasu, tak że jeśli wywołanie funkcji zajmuje więcej niż x czas na pojedynczym elemencie listy, to powinno się przejść dalej? Obliczanie spędzonego czasu jest banalne, ale nie można przerwać funkcji symulacji środkowej, aby sprawdzić czas, prawda?

Wszelkie pomysły, rozwiązania lub sztuczki są mile widziane!

questionAnswers(1)

yourAnswerToTheQuestion