我想将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是一个函数。
您可以使用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)