ts3n_mt
ts3n_mt

Reputation: 67

Using a While for loop for a simulated coin flip in R

I want to toss a coin and want it to stop when I get two consecutive heads in a row.

Here is my code

coin<-0:1
sample(coin, size = 1, replace = TRUE)

flip<-function(){
  coin<-0:1
  toss<-sample(coin, size = 1, replace = TRUE)
}
flip()

heads=1
tosses<-c()
while (heads=="?") {
  tosses=c(tosses, flip())
}

I have my flip function made. I am not sure if I need use a if else statement or count the flips to check for back to back 1's after each coin flip? I am using a while for loop

Upvotes: 0

Views: 778

Answers (3)

ThomasIsCoding
ThomasIsCoding

Reputation: 101337

Perhaps you can try repeat

repeat {
  tosses <- c(tosses, flip())
  if (mean(tail(tosses, 2)) == 1 & length(tosses) > 1) break
}

Upvotes: 1

Oliver
Oliver

Reputation: 8572

Similar to sindri's answer, but removing the need to check length at each iteration

while(sum(tail(tosses, 2)) != 2){
  tosses <- c(tosses, flip())
}

Upvotes: 1

s_baldur
s_baldur

Reputation: 33488

With minimum modification of your current code:

flip<-function(){
  coin<-0:1
  sample(coin, size = 1, replace = TRUE)
}

tosses<-c()
while (length(tosses) < 2 | !all(tail(tosses, 2) == 1)) {
  tosses=c(tosses, flip())
}

Upvotes: 1

Related Questions