循环遍历数据帧的行以进行模拟

时间:2011-08-03 18:35:56

标签: r loops simulation

这更像是R问题中的编程而不是任何概念问题。我试过但是我在R方面缺乏专业知识令我感到沮丧:

我有一个带有列ID,xR01,xR02,nR01,nR02,xRsum的数据帧df,我想使用超几何函数来生成模拟数据。为一个值执行此操作很简单:

df$xSim01 = rhyper(1, df$nR01, df$nR02, df$xRsum)

但我的问题是如果我以上面的形式应用它,它似乎给了我一个值所有20,000行。这让我觉得如果我遍历每一行它可能会正常工作。那么使用apply,with或任何其他函数最有效的是什么?

我的第二个问题是:
我将首先模拟这两个20,000行以获得第一个模拟数据集,然后想要得到该模拟列的平均值,并以某种方式存储该意义并重复模拟N次。所以有种嵌套循环,并希望找到有效的方法来节省计算时间。在R中的正确代码将不胜感激。感谢

dat.sim$xR01 <- rhyper(1, dat.obs$nR01, dat.obs$nR02, dat.obs$xRsum)

1 个答案:

答案 0 :(得分:2)

随机抽取函数都是矢量化的:

df$xSim01 = rhyper(20000, df$nR01, df$nR02, df$xRsum)

请注意replicate重复执行此操作并避免循环。你需要创建自己的函数来绘制观察结果并取平均值。类似的东西:

draw.mean <- function(dat,n) {
   return( mean(rhyper(n,dat$nR01,dat$nR02,dat$xRsum)) )
}
replicate(1000,draw.mean(dat=df,n=20000))