R:如何创建一个向量化函数,其中积分的上部是变量

R: how to create a vectorized function where the upper of an integral is the variable

我正在尝试对一组数据和自定义 CDF 应用 ks.test 测试。 CDF 具有以下形式:

my_cdf <- function(x) integrate(my_pdf, 0, x, subdivisions=2000)$value

其中 my_pdf 是一个以单个值作为参数的函数。

现在,为了使用 ks.test,我需要 my_cdf 在给定矢量输入的情况下生成矢量化输出。我应该怎么做?

示例my_pdf(这不是真正的 PDF,但应该无关紧要):

my_pdf <- function(y) y + 1

示例objective:

my_cdf(c(1,2,3))

[1] 1.5 4 7.5

您可以使用 sapply。就个人而言,我允许将任何 pdf 提供给函数

my_cdf <- function(x, pdf)
{
  sapply(x, function(y) integrate(pdf, 0, y, subdivisions=2000)$value)
}

所以我们可以这样做:

my_pdf <- function(y) y + 1

my_cdf(c(1, 2, 3), pdf = my_pdf)
#> [1] 1.5 4.0 7.5

my_cdf(c(0.1, 0.5, 1), pdf = dnorm)
#> [1] 0.03982784 0.19146246 0.34134475

如果您确定永远不需要提供不同的 pdf,那么您可以这样做

my_cdf <- function(x) sapply(x, function(y) integrate(my_pdf, 0, y, subdivisions=2000)$value)

使用Vectorizemy_cdf转换为矢量化版本:

my_cdfv <- Vectorize(my_cdf)
my_cdfv(1:3)
## [1] 1.5 4.0 7.5