In [1]:
f <- c(0.1, 0.2, 0.5, 0.05, 0.15)
g <- c(0.2, 0.2, 0.2, 0.2, 0.2)
In [2]:
(fg <- f/g)
(co <- 2*max(fg))
  1. 0.5
  2. 1
  3. 2.5
  4. 0.25
  5. 0.75
5
In [3]:
generateY <- function(co, f, g) {
    counter <- 0
  weiter <- TRUE
  while (weiter) {
      counter <- counter+1
    u1 <- runif(1)
    x <- floor(5*u1)+1
    u2 <- runif(1)
    if (u2 < fg[x]/co) {
      y = x
      weiter = FALSE
    } else {
      weiter=TRUE
    }
  }
  return(c(y,counter))
}

print(generateY(co, f, g))
[1] 3 2
In [4]:
y <- replicate(1000000, generateY(co, f, g))

table(y[1,])/ncol(y)
       1        2        3        4        5 
0.099662 0.199772 0.500409 0.049617 0.150540 
In [5]:
mean(y[2,])
4.999791
In [6]:
plot(table(y[1,])/ncol(y))
In [11]:
plot(c(table(y[2,])),log='y')
In [ ]: