2012-06-21 57 views
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])) 
    } 

這確實這個工作,但考慮到數據框是數百行,而且我正在模擬數萬次,所以效率很低。

我覺得有一種方法可以使用其中一個應用函數來完成此操作,但我的經驗是有限的。有任何想法嗎?

+0

沒時間像現在學習! :-)。 ''m_enroll < - mapply(function(x,y)sum(rpois(x,y)),Sites,enroll_rate)'#未經測試,但足夠接近讓您開始跑步 –

+0

感謝Carl - 完美運作! – user1445246

回答

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 
+0

不錯 - 可能比我的僞碼「mapply」更容易解釋 –