2010-06-03 20 views
5

我使用nls來擬合一些指數數據。R:在`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後的代碼將不會執行...

任何想法?

感謝 尼科

回答

10

我通常用這一招:

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

太好了!這正是我需要的! 我剛剛添加了一個'silent =「TRUE」'參數來嘗試,所以我沒有打印出錯誤。 – nico 2010-06-03 08:47:03

+0

@kohske你的答案的邏輯是有道理的。瞭解'try'命令是很有用的,但我期望在你的帖子的第四行有一個nls調用,並且我不熟悉那裏出現的nul函數。在這裏進行快速搜索並沒有幫助我找出最終結果。你有什麼提示,瞭解更多信息?也許我不知道我應該要哪個包? – 2012-12-24 03:17:30

+0

@JasonWhyte這只是一個錯字。我的意思是'嘗試(fit < - nls(...))',當'nls'產生錯誤時,fit會爲NULL。 – kohske 2012-12-27 09:48:33