LINUX.ORG.RU

Векторизовать nls

 ,


0

1

Понедельник — день тяжёлый... Собственно, напомните, как пройтись nls по столбцам матрицы D и для каждого столбца получить набор коэффициентов. В цикле я бы это сделал примерно так:

for(i in 1:1000) {
S <- nls(D[, i] ~ somefunc(x, a, b, c), start = list(a=..., b=..., c=...))
coeffs[i, ] <- coef(S)
}

А как без цикла? Если apply, то не могу врубиться, что писать в формулу в nls. Заранее спасибо.

sapply(1:1000, function(i) {
    coef(nls(D[,i] ~ simefunc(x,a,b,c),
             start = list(a=..., b=..., c=...) ))
})
foreach(i=1:10, .combine=rbind) %do% {
    coef(nls(D[,i] ~ simefunc(x,a,b,c),
             start = list(a=..., b=..., c=...) ))
}
psv1967 ★★★★★
()
Последнее исправление: psv1967 (всего исправлений: 1)
Ответ на: комментарий от psv1967

Спасибо, сейчас попробую. В принципе, я к этому и склонялся: завернуть nls ещё в одну функцию, чтобы возвращала коэффициенты и, например, точность наложения.

al_exquemelin ★★★
() автор топика

Вопрос вдогонку

А как привить nls максимальное безразличие к ошибкам? Я имею в виду, чтобы вся задачка не прерывалась, если решение не сошлось для одного столбца. control=list(warnOnly=TRUE) я написал, теперь пропускаются случаи, где достигнуто максимальное число итераций. Однако теперь имеем вот что:

Ошибка в qr.qty(QR, resid) :
  NA/NaN/Inf при вызове внешней функции (аргумент 1)

al_exquemelin ★★★
() автор топика
Ответ на: Вопрос вдогонку от al_exquemelin

Перехватить ошибку. ?tryCatch() и вернуть чего она там должна... или собирать в виде списка и только после убиения NA собирать в таблицу.


sapply(1:1000, function(i) {
    truCatch(coef(nls(D[,i] ~ simefunc(x,a,b,c),
                      start = list(a=..., b=..., c=...) )),
             error=function(e) data.frame(a=NA,b=NA,c=NA))
})

psv1967 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.