我有以下练习要解决:
Distribution <- function(f,a,b) ...
> f <- function(x) 0.5*sin(x)*(x>=0)*(x<=pi)
> F <- Distribution (f,0,pi)
> F(c(-100,0,1,2,pi,100))
[1] 0.0000000 0.0000000 0.2298488 0.7080734 1.0000000 1.0000000
我需要编写一个函数来计算给定密度函数在分布函数中的分布函数,从低位和低位作为上边界。
Distribution <- function(f, a, b){
function(x){
if(x < a || x > b)
{
0
}
else{
Vectorize(integrate(function(x) f(x), lower = a, upper = x)$value)
}
}
}
f <- function(x) 0.5*sin(x)*(x>=0)*(x<=pi)
F <- Distribution(f,0,pi)
这适用于单个值。但我需要编写函数,以便它接受向量作为输入。我真的不知道我怎么能意识到这一点。如何检查输入是否为向量?我如何为它输出不同的值? 我在谈论R给我这样的结果:
> F(c(-100,0,1,2,pi,100))
[1] 0.0000000 0.0000000 0.2298488 0.7080734 1.0000000 1.0000000
非常感谢你。
答案 0 :(得分:1)
您可以将Vectorize参数放在函数定义周围(代码未经测试):
Distribution <- function(f, a, b)
Vectorize(function(x)
if(x < a || x > b) 0
else integrate(f, lower = a, upper = x)$value)
)