如何将密度对象转换为功能

Man*_*u H 3 statistics r

我想将density()对象的输出用作函数(做很多事情作为导数,在特定的间隔积分,在特定的点求值,...)

为了清楚起见,让我们举个例子:

a=c(1,3,10,-5,0,0,2, 1, 3, 8,2, -2)
b=density(a)
Run Code Online (Sandbox Code Playgroud)

我想对 b

f=some_transformation(b) # transformation I don't know
is.function(f) # answer must be "TRUE"
Run Code Online (Sandbox Code Playgroud)

这样我就可以随时评估密度

f(1.2) # evaluate density at 1.2
Run Code Online (Sandbox Code Playgroud)

计算其导数

Df=D(body(f), "x") # derivative of f
Df(1.2) # derivative at 1.2
Run Code Online (Sandbox Code Playgroud)

并做其他R的东西,好像f是一个函数。

Vin*_*ynd 5

您可以使用approxfun

a <- c(1,3,10,-5,0,0,2, 1, 3, 8,2, -2)
b <- density(a)
f <- approxfun(b, rule=2)
is.function(f)
f(1.2)
Run Code Online (Sandbox Code Playgroud)

由于它不是由公式定义的,因此您不能使用D(符号微分)来计算其导数。不过,您可以用数字估算。

library(numDeriv)
df <- function(x) grad(f,x)
curve( f(x),  lwd=3, xlim=c(-10,10) )
curve( df(x), lwd=3, xlim=c(-10,10) )
Run Code Online (Sandbox Code Playgroud)