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]))
    }

これでうまくいきますが、データフレームが数百行であり、このシミュレーションを数万回実行していることを考えると、非常に非効率的です。

適用関数の1つを使用してこれを行う方法があるように感じますが、それらの使用経験は限られています。何か案は?

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 に答える