为模拟简单的蒙特卡罗优化代码

时间:2017-07-26 07:59:13

标签: r performance optimization

我运行以下代码,但只需要很长时间,我确信有一种方法可以更快地获得相同的结果。

runs <- 1000
prediction <- runif(77,0,1)
n< - length(prediction)
df.all <- data.frame(Preds = rep(prediction, runs),
                     simno=rep(1:runs,each=n))

for (x in 1:runs) {
  for (i in 1:length(df.all$Preds)){
    df.all$rand[i] <- sample(1:100,1)
    df.all$Win[i] <- ifelse(df.all$rand[i]<df.all$Preds[i]*100,1,0)
  }
}

df.all% >% group_by(simno) %>% summarise(Wins=sum(Win)) -> output

1 个答案:

答案 0 :(得分:0)

这很容易通过以下方式进行矢量化:

  • 执行单个样本操作(不是附加的replace = TRUE参数。
  • 执行单一比较>

您可以删除内部for循环以获取

for (x in 1:runs) {
  df.all$rand = sample(1:100, size = length(prediction), replace=TRUE)
  df.all$Win = df.all$rand < df.all$Preds*100
}

然后您可以更进一步并删除该循环

df.all$rand = sample(1:100, n = nrow(df.all), replace=TRUE)
df.all$Win = df.all$rand < df.all$Preds*100