【问题标题】:Looping over rows of a data frame to simulate循环遍历数据框的行以进行模拟
【发布时间】:2011-10-19 08:59:53
【问题描述】:

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

【问题讨论】:

    标签: r loops simulation


    【解决方案1】:

    随机绘制函数都是矢量化的:

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2022-01-20
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多