如何在R中作为输入整合矢量?

时间:2017-05-30 12:16:02

标签: r

我有以下练习要解决:

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

非常感谢你。

1 个答案:

答案 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) 
    )