Я не понимаю, почему приведенная ниже функция возвращает NaN, даже если ответ не должен быть NaN.Я пытался найти похожий вопрос, но большинство из них на другом языке программирования, который я не мог понять.
Код:
a0 = 1.5; a1 = 0.4; b1 = 0.3; g1= 0.7
nu = rep(0,1)
h.new = rep(0,1)
ddp = rep(0,1)
nu[1]=0
h.new[1] = a0/(1-a1-b1)
ddp[1] = 0.5*log(g1)- g1*h.new[1] +
nu[1]*(log(nu[1])-1) - log(factorial(nu[1]))+(g1)*nu[1]*
(1+log(h.new[1]/nu[1]))
Это вывод:
###> ddp
###[1] NaN
Затем я делаю ручной расчет, ясно показываю, что ddp - это не NaN:
###h.new = 1.5/(1-0.4-0.3) = 5
###ddp
###= 0.5*log(0.7)- (0.7)*(5) +
###(0)*(log(0)-1) - log(0!)+(0.7)*(0)*
###(1+log(5/0))
###= 0.5*log(0.7)- (0.7)*(5)
###= -3.6783
Я знал, что для функции sum () na.rm = TRUE может пропустить все пропущенные значения, но в этомслучай, как изменить код, чтобы он вернулся к правильному ответу?
Заранее спасибо.