我是R的新编程,我遇到了一个问题,我在这个小例程中总结了这个问题。它花费的时间似乎非常简单...大约15分钟进行500次迭代。我怎么能加快速度呢?提前谢谢!。
编辑: 它是模拟条件概率乘积的样本(500)的概率的常规计算(在pD.max.S1.i上)。由于d,a和s的组合,该问题具有较大的尺寸。这就是为什么我寻找关于我在例程中使用的结构(data.frame,for)的任何想法,因为它似乎运行缓慢,以及其他结构可能更优化的可能性。
ncd = 3; nud = 4; nua = 2
pD.max.S1.i <- matrix( c( 0.00, 0.95, 0.99,
0.00, 0.80, 0.95,
0.00, 0.50, 0.70,
0.00, 0.25, 0.30,
0.00, 0.00, 0.10),
nrow = nud + 1, ncol = nua + 1, byrow = T) # probabilidades
rownames(pD.max.S1.i) = paste("d", 0 : nud, sep = "")
colnames(pD.max.S1.i) = paste("a", 0 : nua, sep = "")
pD.max.S1.i=as.data.frame(pD.max.S1.i)
d = expand.grid(0 : 4, 0 : 4, 0 : 4)
d = d[rowSums (d) == nud,]
rownames(d) = paste0("d", apply(d, 1, paste0, collapse=""))
a = expand.grid(0 : 2 ,0 : 2 ,0 : 2)
a = a[rowSums (a) <= nua,]
rownames(a) = paste0("a", apply(a, 1, paste0, collapse=""))
s = expand.grid(0 : 1, 0 : 1, 0 : 1)
rownames(s) = paste0("s", apply(s, 1, paste0, collapse=""))
fun.prd.pA = function(pA, idp, idr, idc, ncd){ # productorio de probabilidades
ppA = 1
for (i in 1 : ncd) {
ppi = pA[idr[1,i] + 1, idc[1,i] + 1]
if (idp[1,i] == 0) ppi = 1 - ppi
ppA = ppA * ppi
}
return(ppA)
}
for (ite in 1: 500) {
for (xd1 in rownames(d)){
for (xaa in rownames(a)){
for (xs1 in rownames(s)){
p1 = fun.prd.pA (pD.max.S1.i, s[xs1,], d[xd1,], a[xaa,], ncd)
}
}
}
}