您好我正试图通过矢量化来加速计算以下for循环,即使用sapply()
等。
但由于结构非常复杂,似乎不可能完成任务。我已经尝试了几天但最终没有解决方案。
有没有人可以看看如何加快以下功能?
alpha2f <- function(p0,t2,n1,n2){
alpha2=0
for (x1 in 12:n1){
for (x2 in 0:n2){
for (y2 in 0:n2){
a=dbinom(x1,n1,p0)
b=dbinom(x2,n2,p0)
alpha2=alpha2+a*b*dbinom(y2,n2,p0)*ifelse(ztest(x1+x2,y2,n1+n2,n2)>t2,1,0)
}}}
return(alpha2)
}
答案 0 :(得分:0)
你可以通过对代码进行矢量化并删除不必要的东西(如ifelse)来加快代码速度。你应该试试:
alpha2f <- function(p0, t2, n1, n2){
alls <- expand.grid(x1=12:n1, x2=0:n2, y2=0:n2)
a <- dbinom(alls$x1, n1, p0)
b <- dbinom(alls$x2, n2, p0)
z <- numeric(nrow(alls))
X <- alls$x1+alls$x2
N <- n1+n2
for (i in 1:length(z))
z[i] <- (ztest(X[i], alls$y2|i], N, n2) > t2)
d <- dbinom(alls$y2,n2,p0)
alpha2 <- sum(a*b*d*z)
return(alpha2)
}
我无法测试它,因为我不知道你使用了哪个ztest功能。如果此函数是矢量化的,那么您不需要循环。 HTH