R: ловить ошибки в `nls` - PullRequest
       19

R: ловить ошибки в `nls`

6 голосов
/ 03 июня 2010

Я подгоняю некоторые экспоненциальные данные, используя nls.

Код, который я использую:

fit <- nls(y ~ expFit(times, A, tau, C), start = c(A=100, tau=-3, C=0))

expFit определяется как

expFit <- function(t, A, tau, C)
    {
    expFit <- A*(exp(-t/tau))+C
    }

Это хорошо работает для большинства моих данных, для которых предоставленные начальные параметры (100, -3 и 0) работают хорошо.Иногда, однако, у меня есть данные, которые не соответствуют этим параметрам, и я получаю ошибки от nls (например, «единый градиент» или тому подобное).Как «поймать» эти ошибки?

Я пытался сделать что-то вроде

fit <- NULL
fit <- nls(...)

if (is.null(fit))
    {
    // Try nls with other starting parameters
    }

Но это не сработает, потому что nls, кажется, останавливает выполнение и код после nls не выполнит ...

Есть идеи?

Спасибо, Нико

1 Ответ

10 голосов
/ 03 июня 2010

Я обычно использую этот трюк:

params<-... # setup default params.

while(TRUE){

fit<-NULL
try(fit<-nls(...)); # does not stop in the case of error

if(!is.null(fit))break; # if nls works, then quit from the loop

params<-... # change the params for nls

}
...