NA 由 approxfun() 函数 R 返回

NA returned by approxfun() function R

obs=log(rexp(500))
plot(density(obs))

我正在使用 approxfun() R 函数创建一个捕获此分布的函数,并能够为任何传递的 x 值 return 一个 y 值(通过使用插值)。

fun=approxfun(density(obs)$y)
# create a sequence of x values
seq=round(seq(min(obs),max(obs),length.out=50),2)
# find out which y values assigned by fun are not equal to NA
seq[-which(is.na(fun(seq)))]

returns

1.11 1.27 1.43 1.60

为什么所有小于 1 的 x 值(确切地说是从 -6.38 to 0.95 开始)传递给函数都分配了一个 NA y 值? 函数是为 -6, -2 等定义的?我本来期望 0, 0.13 左右的插值,等等。不是 NAs...

应该是这样的:

fun <- approxfun(density(obs))

您在编写 fun=approxfun(density(obs)$y) 时不提供 x 值。所以,你应该省略 $y.

因此:

obs <- log(rexp(500))
fun <- approxfun(density(obs))
seq <- round(seq(min(obs), max(obs), length.out = 50), 2)
seq[-which(is.na(fun(seq)))]
# numeric(0)

没有 NAs.