我想将 density()
对象的输出用作一个函数(作为导数做很多事情,在特定区间积分,在特定点求值,...)
为了清楚起见,让我们举个例子:
a=c(1,3,10,-5,0,0,2, 1, 3, 8,2, -2)
b=density(a)
我想对 b
进行一些转换
f=some_transformation(b) # transformation I don't know
is.function(f) # answer must be "TRUE"
这样我就可以评估任何一点的密度
f(1.2) # evaluate density at 1.2
计算其导数
Df=D(body(f), "x") # derivative of f
Df(1.2) # derivative at 1.2
并像 f
是一个函数一样做其他 R 的事情。
最佳答案
您可以使用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)
由于它不是由公式定义的,
你不能使用 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) )
关于r - 如何将密度对象转换为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635805/