The following R program was designed to (somewhat) randomly select students to call for questions in a class room environment. It was created in Harvard Graduate School of Graduate Education's S-290 to replace a physical ping-pong ball jar. It takes a list of options (e.g., students), selects one at random and returns it, and then adjusts the weights so that the selected option is relatively less likely to be selected in subsequent draws. Every student can be called on at any time. It is particularly well suited to classes in which a reasonably small number of students will be called on a small number of times. Over even a small number of classes, a very balanced list is likely. The software was written by Benjamin Mako Hill and is released into the public domain. Usage -------- The first time you the program this you'll need to: Modify ping_pong_ball_jar.R in a text editor to include the list of options or students that you want. There are comments in the file which should help provide some direction. Save the modified version for later if you'll be doing this again. Each time you use it, you'll need to: Paste the contents of ping_pong_ball_jar.R into a running session of R. Every time you want to select an option, you'll need to: Type "get.ping.pong.ball()" and then within R. As a shortcut, you can usually just type once or twice to see the last command if you're going to be running it repeatedly. Files --------- ping_pong_ball_jar.R Contains the R necessary to run the program. You'll need to at least modify the list of options. ping_pong_ball_jar_simulation.R simulation_unweighted_random.png simulation_weighted.png Code and output from simulations that show the number of questions asked to each participant in a large number of simulated classes.