2010-06-03 20 views
5

Bazı üstel verileri nls kullanarak uyguluyorum.R: 'nls' hatalarını yakalamak

kullanıyorum kodudur:

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 
    } 

Bu başlangıç ​​parametreleri sağlanan kendisi için benim verilerin çoğunu için iyi çalışır (100 olarak tanımlanır, -3 ve 0) iyi çalışıyor. Ancak, bazen, bu parametreler ile iyi gitmeyen verilerim var ve nls'dan hatalar alıyorum (örneğin "tekil eğim" veya bunun gibi şeyler). Bu hataları nasıl "yakalarım?" ...

Herhangi fikirleri

Ben

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

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

gibi bir şey yapmaya çalıştık Ama nls yürütme ve yürütmek olmaz nls sonra kodu durdurmak gibi görünüyor, çünkü bu işe yaramaz?

sayesinde Genellikle bu hile kullanmak

cevap

10

nico:

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 

} 
+0

Büyük! Tam olarak ihtiyacım olan şey bu! Denemek için bir 'sessiz = 'DOĞRU'' parametresini ekledim, bu yüzden yazdırılan hataları alamıyorum. – nico

+0

@kohske Cevabınızın mantığı mantıklı. '' Try' komutunu bilmek yararlıdır, ancak yazınızın dördüncü satırında bir nls çağrısı bekledim ve orada görünen nul işlevini bilmiyorum. Buradaki hızlı arama neyin ne yaptığını öğrenmeme yardımcı olmadı. Bunun hakkında daha fazla bilgi edinebileceğiniz herhangi bir ipucu var mı? Belki hangi paketin gerektiğini bilmiyorum? –

+0

@JasonWhyte Bu sadece bir yazım hatası. Denemek istedim (fit <- nls (...)) ve nls bir hataya neden olduğunda NULL olacak. – kohske