Head or Tails game
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of darnold
Sent: Friday, August 03, 2012 9:18 PM
To: r-help at r-project.org
Subject: Re: [R] Head or Tails game
Wow! Some great responses!
I am getting some great responses. I've only read David, Michael, and
Dennis
thus far, leading me to develop this result before reading further.
lead <- function(x) {
n <- length(x)
count <- 0
if (x[1] >= 0) count <- count + 1
for (i in 2:n) {
if (x[i] > 0 || (x[i] == 0 && x[i-1] >= 0 )) {
count <- count + 1
}
}
count
}
games <- replicate(10000,sample(c(-1,1),40,replace=TRUE))
games_sum <- apply(games,2,sum)
plot(table(games_sum))
games_lead <- apply(games,2,cumsum)
games_lead <- apply(games_lead,2,lead)
plot(table(games_lead))
Now I am going to read Arun, William, and Jeff's responses and see what
other ideas are being proposed.
Thanks everyone.
D.
Here is another solution that doesn't need to define an additional function with an explicit loop. It seems to be considerably faster than the approach presented above.
system.time({
set.seed(123)
games <- matrix(sample(c(-1, 1), 40*10000, TRUE), ncol = 10000)
games_sum <- apply(games,2,cumsum)
games_lead <- colSums((games_sum > 0) | (games_sum==0 & games==-1))
})
user system elapsed
0.08 0.00 0.08
plot(table(games_sum[40,]))
plot(table(games_lead))
Compare this with your solution
system.time({
set.seed(123)
games <- replicate(10000,sample(c(-1,1),40,replace=TRUE))
games_sum <- apply(games,2,sum)
games_lead <- apply(games,2,cumsum)
games_lead <- apply(games_lead,2,lead)
})
user system elapsed
0.95 0.02 0.98
Hope this is helpful,
Dan
Daniel J. Nordlund
Washington State Department of Social and Health Services
Planning, Performance, and Accountability
Research and Data Analysis Division
Olympia, WA 98504-5204