Esto no es práctico, pero sí bonito; bonito, además, de esa forma inasequible a la chusma
Va de muestrear los números $1, \dots, n$ que tienen asignadas probabilidades $p_1, \dots, p_n$. Una manera muy impráctica (en R, basta usar sample) y nada intuitiva de hacerlo es recurriendo a la distribución de Gumbel: library(evd) pes <- runif(5) pes <- pes / sum(pes) gammas <- log(pes) + 2 x <- rgumbel(length(pes)) muestra <- which.max(gammas + x) O, en masa, aplicando get_samples <- function(n){ replicate(n, { x <- rgumbel(length(pes)) which.max(gammas + x) }) } El seudocódigo está extraído de la Wikipedia y el motivo por el que la cosa funciona en lugar de no funcionar, que es la parte bonita del asunto, está explicado aquí.