我想计算与向量中每个值关联的函数的积分。举一个例子,我准确地描述了我的目标如下。
假设x
和y
是独立的随机变量,I
是一个指标变量,如果I=1
或y > 0.25x
则为zero
。我希望从指数分布中得到n
y的绘制,并且对于每个绘制,我希望计算g = xf(x)I
在x
,f(x)
的分布上的积分。我希望这个分布是指数的,参数值为1.我在r
中尝试了以下代码。
f = function(n){
h = list()
g = numeric()
y = rexp(n)
for(i in 1:n){
h[i] = function(x){(x * dexp(x) * (y[i] > 0.5*x))}
g[i] = integrate(h[i], lower=-Inf, upper=Inf)
}
return(summary(g))
}
但是当我运行f(3)时,我收到一条错误消息“*Error in h[i] = function(x) { : cannot coerce type 'closure' to vector of type 'list'"*
。但是当我运行以下代码时
y = rexp(1)
h = function(x){x * dexp(x) * (y > 0.5*x)}
integrate(h, lower=-Inf, upper=Inf)
f(3)
我得到了结果。是否有人建议如何改进此代码,以便在h
的每个值处评估y
函数,输出为function
,然后将其传递给{{1}功能?
答案 0 :(得分:1)
我建议使用sapply
代替循环:
f = function(n){
y = rexp(n)
g = sapply(1:n, function(i)
integrate(function(x) (x * dexp(x) * (y[i] > 0.5*x)), lower=-Inf, upper=Inf))
return(summary(g))
}
答案 1 :(得分:1)
您需要将[[
用于子集h
,而不是[
。这是因为[
将返回子列表而不是内容。此外,integrate
会返回一个复杂的结构,如果您只想要该值,请附加$value
来选择该值。
f = function(n){
h = list()
g = numeric()
y = rexp(n)
for(i in 1:n){
h[[i]] = function(x){(x * dexp(x) * (y[i] > 0.5*x))}
g[i] = integrate(h[[i]], lower=-Inf, upper=Inf)$value
}
return(summary(g))
}
f(3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.2456 0.3269 0.4082 0.4069 0.4876 0.5669