r - 快速循环遍历矩阵并计算并为每个元素赋值?

时间:2014-07-09 16:14:44

标签: r for-loop matrix nested-loops

我有一个大的概率矩阵(称之为A),N乘806,其中N通常是数千的数字。

使用这个概率矩阵,我想创建另一个矩阵(称之为B),N乘806,只包含二进制值。 B [i,j]中的值是通过使用二项式在A [i,j]中的对应概率来确定的。我正在使用的代码如下:

diCases <- matrix(0, nrow = numcases, ncol = numdis)
diConts <- matrix(0, nrow = numconts, ncol = numdis)

for(row in 1:nrow(diCases)) {
    print(paste('Generating disease profile for case', row, '...'))
    for(col in 1:ncol(diCases)) {
        pDis <- Pcases[row, col]
        diCases[row, col] <- rbinom(1, 1, pDis)
    }
}

for(row in 1:nrow(diConts)) {
    print(paste('Generating disease profile for control', row, '...'))
    for(col in 1:ncol(diConts)) {
        pDis <- Pconts[row, col]
        diConts[row, col] <- rbinom(1, 1, pDis)
    }
}

基本上,我已经使用了嵌套的for循环,循环遍历每一行中的每一列并继续前进到下一行,根据结果分配1或0:

rbinom(1, 1, pDis)

其中pDis是开头提到的A [i,j]。可以想象,这很慢,是我代码中的主要瓶颈。这段代码是在我计划一次又一次地运行的模拟中,理想情况是在很短的时间内。

有没有更快的方法来实现这一目标?我查看了&#34; apply&#34;功能,但无法真正弄清楚如何使它适用于这个特定的任务。

提前谢谢大家。

1 个答案:

答案 0 :(得分:4)

尝试

f <- function(prob.mat) 
    matrix(rbinom(prob.mat, 1, prob.mat), ncol = ncol(prob.mat))

diCases <- f(Pcases)
diConts <- f(Pconts)