確率が100000倍の2つの異なる分布から描画しようとしています。残念ながら私はforループで何が間違っているかはわかりませんが、希望する100,000の値の代わりに1つの値をsimulated_data
に加えるだけです。確率が2つの分布から描画するR
質問1:これを修正するにはどうすればよいですか?
質問2:リスト内の100,000項目をループする必要がない、はるかに効率的な方法がありますか?ここで
#creating a vector of probabilities
probabilities <- rep(0.99,100000)
#creating a vector of booleans
logicals <- runif(length(probabilities)) < probabilities
#empty list for my simulated data
simulated_data <- c()
#drawing from two different distributions depending on the value in logicals
for(i in logicals){
if (isTRUE(i)) {
simulated_data[i] <- rnorm(n = 1, mean = 0, sd = 1)
}else{
simulated_data[i] <- rnorm(n = 1, mean = 0, sd = 10)
}
}
を私はあなたが理由あなたのループきちんとあなたの問題を解決しますが、今後の参考のためご覧くださいなぜなら 'for each'ループを使うとき、' i番目の項はインデックスではないからです。したがって、 'simulated_data [i]'は 'simulated_data [TRUE]'または 'simulated_data [FALSE]'としてのみインスタンス化され、1つの値が割り当てられます。 1つの潜在的な解決策は 'for(i in 1:length(logicals)) 'を使用することです。 – Zach
@ Zach:ループで '1:n'を使うべきではないことを除けば、ほぼ+1です。代わりに 'seq_len(n)'を使います( 'n'がゼロであると判明した場合、前者は奇妙なことを行います)。 'seq_along'は別の関連する関数です。 – JDL