Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据帧的行上循环以模拟_R_Loops_Simulation - Fatal编程技术网

R 在数据帧的行上循环以模拟

R 在数据帧的行上循环以模拟,r,loops,simulation,R,Loops,Simulation,这更像是一个R中的编程问题,而不是任何概念问题。我试过了,但我在R方面缺乏专业知识,这让我很沮丧: 我有一个数据帧df,列ID为xR01、xR02、nR01、nR02、xRsum,我想使用超几何函数生成模拟数据。为一个值执行此操作很简单: df$xSim01 = rhyper(1, df$nR01, df$nR02, df$xRsum) 但我的问题是,如果我以上面的形式应用它,它似乎为所有20000行提供了一个值。这让我觉得如果我在每一行上循环,它可能会正常工作。那么,使用apply、with

这更像是一个R中的编程问题,而不是任何概念问题。我试过了,但我在R方面缺乏专业知识,这让我很沮丧:

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

df$xSim01 = rhyper(1, df$nR01, df$nR02, df$xRsum)
但我的问题是,如果我以上面的形式应用它,它似乎为所有20000行提供了一个值。这让我觉得如果我在每一行上循环,它可能会正常工作。那么,使用apply、with或任何其他函数最有效的方法是什么呢

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

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

dat.sim$xR01随机抽取功能均为矢量化:

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))
draw.mean