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)
使用Vectorize
将my_cdf
转换为矢量化版本:
my_cdfv <- Vectorize(my_cdf)
my_cdfv(1:3)
## [1] 1.5 4.0 7.5
我正在尝试对一组数据和自定义 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)
使用Vectorize
将my_cdf
转换为矢量化版本:
my_cdfv <- Vectorize(my_cdf)
my_cdfv(1:3)
## [1] 1.5 4.0 7.5