使用for循环

时间:2015-06-23 19:53:55

标签: r performance simulation memory-efficient

我正在运行一些不同的蒙特卡罗模拟,所有模拟都涉及生成一些数据,拟合模型,以及从模型的拟合中捕获几个输出变量。通常生成数据以使得若干特征变化(例如,项目数量,样本大小),并且模型拟合以使得若干其他特征变化(例如,估计方法,模型错误指定)。我对生成数据或如何实际适合模型没有任何疑问。但是,我知道我填充结果数据框的方法效率非常低,我希望能帮助你改进它。我通常的方法如下:

1)创建具有与我必须适合的模型一样多的行的数据框(例如,迭代次数*不同的项目长度*不同的样本大小长度*不同的估计方法*不同类型的模型错误指定),以及尽可能多的列我需要包含识别变量(样本大小,项目数等)并捕获所有输出。

2)使用for循环识别条件的特定组合和所述组合的特定迭代,拟合模型,并填充数据框的相应行。

所以我可以从看起来像这样的东西开始:

> head(df)
    fit.model n.sample n.item distr.cond estim iteration df.chisq obt.chisq
1           1      100      3          1    ML         1       NA        NA
1.1         1      100      3          1    ML         2       NA        NA
1.2         1      100      3          1    ML         3       NA        NA
1.3         1      100      3          1    ML         4       NA        NA
1.4         1      100      3          1    ML         5       NA        NA
1.5         1      100      3          1    ML         6       NA        NA

其中最后两列捕获结果并需要填写,前六列是唯一标识每一行所必需的。然后我使用for循环逐行,选择该迭代的识别特征(这允许我找到适当的数据文件并读入它,以及指定如何拟合模型),进行模型拟合,然后将NA列写入所需的输出。然后,我只使用获得的值填充剩余的NA,例如使用df$obt.chisq[i] <- fitMeasures(fit,"chisq"),其中函数fitMeasures从结果拟合模型fit中提取特定值。

可以对此进行矢量化吗?我忘记了术语,但我认识到在这种情况下,每次迭代完全独立于彼此的迭代,因此特定的顺序并不重要。现在是改变方法的时候了!任何帮助将不胜感激。

0 个答案:

没有答案