rpoissonuniformuniform-distribution

Using R while loop to generate random variables


I want to generate a random variable X by continuing generating U(0,1) random variables as long as their product falls below exp(-2). Then my random variable X would be equal to the number of U(0,1) random variables that was generated minus 1.
I tried using the while loop to do it but not sure why the code does not return anything in my console. Please help me point out what I did wrong?

p <- 1
counter <- 0

while(p < exp(-2)) {
  u <- runif(1)
  p <- p*u
  counter <- counter+1

  X <- counter - 1
  print(X)
}

Solution

  • update

    If you want to replicate the process by 100 times, you can use replicate

    replicate(
        100,
        {
            p <- 1
            counter <- 0
            repeat {
                p <- p * runif(1)
                counter <- counter + 1
                if (p < exp(-2)) {
                    break
                }
            }
            counter
        }
    )
    

    I guess you could use repeat with condition p < exp(-2)

    p <- 1
    counter <- 0
    repeat {
        print(counter)
        p <- p * runif(1)
        counter <- counter + 1
        if (p < exp(-2)) {
            print(counter)
            break
        }
    }