warnOnlyだと,nlsの返り値がないため,summaryするとエラーが出る.
そこでtry関数を使って,とりあえず値があるかチェックしておいて,
class( )で内容に"try-error"が含まれていたら,ループを飛ばすなどする.

  for(j in j1:jn){
    y2 <- c[(n+2):j]
    x2 <- seq(1,length(y2),1)
    dat <- data.frame(x2,y2)
    tmp2 <- try(nls(y2~(b/(1-a))*((x2)^(1-a)-1)+d*(x2-1),dat,
                start=list(a=0.7,b=y2[1],d=y1[1]),control=list(warnOnly=FALSE)))
    if( class(tmp2) == "try-error" ) next
 
     res2 <- summary(tmp2)
 }

無事に終了したときには,classs(tmp2)の値は"nls"となり,通常通り処理ができる.
参考