Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R : catching errors in `nls`

I'm fitting some exponential data using nls.

The code I'm using is:

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

expFit is defined as

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

This works well for most of my data, for which the starting parameters provided (100, -3 and 0) work well. Sometimes, though, I have data that doesn't go well with those parameters and I get errors from nls (e.g. "singular gradient" or things like that). How do I "catch" these errors?

I tried to do something like

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

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

But this won't work because nls seems to stop the execution and the code after nls will not execute...

Any ideas?

Thanks nico

like image 728
nico Avatar asked Jun 03 '10 06:06

nico


1 Answers

I usually use this trick:

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

}
like image 191
kohske Avatar answered Nov 03 '22 09:11

kohske