drnd <- function(x, p, n) {
z <- NULL
ps <- cumsum(p)
r <- runif(n)
for (i in 1:n) z <- c(z, x[which(r[i] <= ps)[1]])
return(z)
}
> x <- c(1, 2, 3, 4, 5)
> p <- c(0.1, 0.2, 0.2, 0.35, 0.15)
> out <- drnd(x, p, 10000)
> table(out)/10000
out
1 2 3 4 5
0.0978 0.2056 0.1974 0.3480 0.1512
缺点:慢,因为那个for循环