Skip to content

better loop for simulation

5 messages · jim holtman, Duncan Murdoch, Dalthorp, Daniel +1 more

#
I want to calculate a function many times over.  My solution below works, but does not seem very elegant.  

# my function to run many times over
stud.score <- function(n.questions, mult.choice = 2) {
	prob.success <- 1 / mult.choice
	answers <- (runif(n.questions) < prob.success)
	return(sum(answers))
} 

# my method to run above function 1000 times and store results
count.df <- data.frame(n.count = rep(10, 1000))
scores.df <- apply(count.df, 1, function(x) return(stud.score(x)))	

Creating a data frame just to repeat the the count seems wasteful.  How can I generate scores.df without count.df?

Thanks,
Naresh
#
use replicate:
+          prob.success <- 1 / mult.choice
+          answers <- (runif(n.questions) < prob.success)
+          return(sum(answers))
+  }
The decimal point is at the |
   0 | 0
   1 | 0000000000000
   2 | 000000000000000000000000000000000000000000000000000000000
   3 |
00000000000000000000000000000000000000000000000000000000000000000000+26
   4 |
00000000000000000000000000000000000000000000000000000000000000000000+116
   5 |
00000000000000000000000000000000000000000000000000000000000000000000+153
   6 |
00000000000000000000000000000000000000000000000000000000000000000000+142
   7 |
00000000000000000000000000000000000000000000000000000000000000000000+35
   8 | 00000000000000000000000000000000000000000000
   9 | 000000000000
  10 | 0


Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

On Sat, Jun 18, 2016 at 6:12 PM, Naresh Gurbuxani <
naresh_gurbuxani at hotmail.com> wrote:

            

  
  
#
On 18/06/2016 6:12 PM, Naresh Gurbuxani wrote:
You don't need a data frame or a loop at all.  You're simulating 
binomial values, and R has rbinom() to do that in a vectorized way.

Duncan
#
try:

n.questions <- 10  # or however many you want
mult.choice <- 2
scores <- rbinom(1000, size = n.questions, prob = 1/mult.choice)


On Sat, Jun 18, 2016 at 3:12 PM, Naresh Gurbuxani <
naresh_gurbuxani at hotmail.com> wrote:

            

  
    
#
Daniel, Duncan, and Jim,


Many thanks for your prompt responses.  My example function is indeed binomial, for which a built function already exists.  But my goal is to find a general solution which would work for other functions as well.

replicate() works well for me.

Naresh