2017-07-26 7 views
0

私は次のコードを実行しますが、年を取るだけで同じ結果を得る方法がはるかに高速です。あなたが削除することができ、単一の比較> シンプルなモンテカルロシミュレーションのようなコードを最適化する

を実行する単一のサンプル操作(ない追加replace = TRUE引数を実行

  • 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することができますに。取得するインナーループは

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には、[[X]] $ランドをdf.all埋めることができます。ループの最後に、Reduce(rbind、df.all)を使用してそれらをすべて1つの大きなデータフレームにバインドすることができます。 –

関連する問題