在我编程的模拟中,在每次迭代中,我需要计算数据帧中每行的一些随机泊松数的总和,其中参数存储在该行的另一列中。
以下是数据样本(以下代码中称为“研究”):
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 :(得分: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