0

在我正在编程的模拟中,在每次迭代中,我需要为数据帧中的每一行计算一些随机泊松数的总和,其中参数存储在该行的另一列中。

这是数据示例(在下面的代码中称为“研究”):

    phase Sites enroll_rate rec_months stud_months enrolled m_enroll
51     2     1  2.95920139  2.0000000    5.000000        6        0
52     2    24  0.20784867  2.0000000    5.000000       10        0
53     2     3  0.46501736  3.0000000    6.000000        2        0
54     2     2  1.40480769  3.0000000    6.000000        7        0
55     2     1  1.31299020  5.0000000    7.000000        3        0
64     2    29  0.04373204  0.9712526    1.971253        2        0

这是我用来实现此目的的代码:

for (j in 1:nrow(studies)) { 
    studies$m_enroll[j] <- sum(rpois(studies$Sites[j],studies$enroll_rate[j]))
    }

这可以完成工作,但考虑到数据框有数百行并且我正在做这个模拟数万次,它的效率非常低。

我觉得有一种方法可以使用其中一个 apply 函数来做到这一点,但我对它们的经验是有限的。有任何想法吗?

4

1 回答 1

2
studies <- studies[rep(1:6,3000),]
system.time(for (j in 1:nrow(studies)){studies$m_enroll[j] <-     
                sum(rpois(studies$Sites[j],studies$enroll_rate[j]))})
   user  system elapsed 
 105.74    0.00  106.30 
system.time(test <- sapply(1:nrow(studies),function(x) 
                    sum(rpois(studies$Sites[x],studies$enroll_rate[x]))))
   user  system elapsed 
   0.36    0.00    0.36 
于 2012-06-21T19:38:56.633 回答