由于nlsModel中的错误,nls在for循环中停止

时间:2018-10-11 13:53:28

标签: r loops na nls

如果我多次运行for循环nlsLM(),有时由于无用的数据,Rstudio停止并显示以下错误消息: “ nlsModel(formula,mf,start,wts)中的错误: 初始参数估计时的奇异梯度矩阵”

所以我知道并不是每个数据集都可以估算出适合参数,但是我不想要的是整个过程都停止了。

如果没有任何错误,则将系数存储在其中 result[x]-因此,如果无法将NA存储在result[x]中,目前我已经尝试了很多目标,但是没有成功。

xx <- c(1:10)
result <- vector("numeric")
width<- vector("numeric")
for(x in xx){
  temp <- long[ which(long$NR== x), ]
  Ytemp <- temp$Yield
  Ttemp <- temp$Treatment
  M <- nlsLM(Ytemp ~ (maximum + (minimum - maximum)/(1+exp((Ttemp- 
x0)/dx))), 
             start=list(x0=-10, dx=1))
  print(summary(M))
  result[x] <- coef(M)[1]
  width[x] <- coef(M)[2]
}

round(result, digits = 1)
round(width, digits = 2)
mean <- mean(result)
sd <- sd(result)

我很高兴得到提示!

Matthias

1 个答案:

答案 0 :(得分:0)

考虑tryCatch,将NA分配给向量,以解决模型调用中的任何错误:

xx <- c(1:10)
result <- vector("numeric")
width<- vector("numeric")

for(x in xx) {
  temp <- long[which(long$NR== x),]
  Ytemp <- temp$Yield
  Ttemp <- temp$Treatment

  tryCatch({
     M <- nlsLM(Ytemp ~ (maximum + (minimum - maximum)/(1+exp((Ttemp-x0)/dx))), 
                start=list(x0=-10, dx=1))
     print(summary(M))             # PRINT MODEL SUMMARY
     result[x] <- coef(M)[1]       # ASSIGN COEF
     width[x] <- coef(M)[2]        # ASSIGN COEF

  }, error = function(e) {
     print(e)                      # PRINT ERROR MESSAGE
     result[x] <- NA               # ASSIGN NA
     width[x] <- NA                # ASSIGN NA
  })

}

round(result, digits = 1)
round(width, digits = 2)
mean <- mean(result, na.rm=TRUE)   # REMOVE NA
sd <- sd(result, na.rm=TRUE)       # REMOVE NA