2017-07-26 103 views
0

我運行下面的代碼,但只需要很長時間,我確信有一種方法可以更快地獲得相同的結果。爲仿真蒙特卡羅仿真優化代碼

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 

回答

0

這可以容易地通過將vectorise:

  • 執行單個取樣操作(而不是額外replace = TRUE參數
  • 執行比較單一>

可以刪除內循環得到

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 
+0

您可以使用數據幀的列表,而是和在運行數x,你填寫df.all [[X]] $蘭特。在循環結束時,您可以使用Reduce(rbind,df.all)將它們全部綁定到一個大數據框中。 –