У меня есть довольно простая кусочная функция, которая принимает векторный аргумент omega
:
btilde <- function(omega) {
if(min(omega)<=0) stop("ALL ELEMENTS OF OMEGA MUST BE POSITIVE")
ifelse( 0 < omega & omega <= 1, 0.233*omega^2,
ifelse( 1 < omega & omega <= 3, 0.005*omega^4 - 0.06906*omega^3 + 0.3167*omega^2 - 0.02326*omega,
ifelse( 3 < omega & omega <= 40, 0.705*sqrt(omega)*log(omega),
ifelse(40 < omega, sqrt(3*omega*log(omega) - log(8*pi) - 2/log(omega) - 170),
NA))))
}
Я получаю «Предупреждение о создании NaN», если omega=c(1,41)
, но не если omega=1
или omega=41
.
> btilde(1)
[1] 0.233
> btilde(41)
[1] 16.8228
> btilde(c(1,41))
[1] 0.2330 16.8228
Warning message:
In sqrt(3 * omega * log(omega) - log(8 * pi) - 2/log(omega) - 170) :
NaNs produced
Если условие "> 40" применяется к "omega = 1", тогда да, я бы получил NaN
, но это не так, как работает ifelse()
, верно?Может ли кто-нибудь помочь мне понять, что происходит?Спасибо!