优化R中的例程

时间:2015-05-31 16:18:26

标签: r optimization

我是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)
            }
        }
    }
}

0 个答案:

没有答案