繁体   English   中英

如何使`integrate()`接受R函数中的向量?

[英]How to make `integrate()` to accept a vector in an R function?

我想知道如何使我的函数Bpp 接受其第一个参数 t 的向量

Bpp = function(t, n1, n2 = NULL){

      N = ifelse(is.null(n2), n1, n1*n2/(n1+n2))
     df = ifelse(is.null(n2), n1 - 1, n1 + n2 - 2)

     H1 = integrate(function(delta)dcauchy(delta, 0, sqrt(2)/2)*dt(t, df, delta*sqrt(N)), -Inf, Inf)[[1]]
     H0 = dt(t, df)
   BF10 = H1/H0
p.value = 2*(1-pt(abs(t), df))

list(BF10 = BF10, p.value = p.value)
}

Bpp(t = -6:6, 20, 20) ## This will give error because `t` is now a vector?

看起来我无需测试即可快速给出答案。 在您的Bpp使用以下内容:

# joint density
joint <- function(delta, t) dcauchy(delta, 0, sqrt(2)/2) * dt(t, df, delta*sqrt(N))
# marginal density of `t`
marginal.t <- function (t) integrate(joint, lower = -Inf, upper = Inf, t = t)[[1]]
H1 <- sapply(t, marginal.t)

因此,在这里我们也可以使用Vectorize看起来如何?

使用您的原始Bpp

Bpp <- Vectorize(Bpp, vectorize.args = "t")
Bpp(-6:6, 20, 20)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM