J'essaie de tirer de deux distributions différentes avec une probabilité 100000 fois. Malheureusement je ne peux pas voir ce qui ne va pas avec ma boucle for, cependant, il ajoute seulement 1 valeur à simulated_data
au lieu des 100.000 valeurs désirées.Dessin à partir de deux distributions avec une probabilité dans R
Question 1: Comment puis-je résoudre ce problème?
Question 2: Existe-t-il une méthode beaucoup plus efficace où je n'ai pas besoin de faire défiler 100 000 éléments dans une liste?
#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)
}
}
Je vois que vous avez résolu votre problème d'une manière ordonnée, mais pour référence ultérieure la raison pour laquelle votre boucle échoué est parce que lorsque vous utilisez une boucle 'for each', le' i'th terme n'est pas un index. Ainsi, 'simulated_data [i]' est seulement instancié comme 'simulated_data [TRUE]' ou 'simulated_data [FALSE]', et ne reçoit qu'une seule valeur. Une solution potentielle est d'utiliser 'for (i in 1: length (logicals))'. – Zach
@Zach: presque un +1, sauf que vous ne devriez pas utiliser '1: n' dans les boucles. Utilisez à la place 'seq_len (n)' (le premier ferait des choses étranges si 'n 'se révélait être zéro, ou négatif.). 'seq_along' est une autre fonction pertinente. – JDL