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

这更像是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)

最佳答案 随机抽取函数都是矢量化的:

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

看看复制是为了反复这样做并避免循环.你需要创建自己的函数来绘制观察结果并取平均值.就像是:

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