After a period of examinations I needed to fresh up some R-vocabulary (the exact syntax) because I started to mix it up with other programming languages’ syntax. And here is my result: **A dice game simulation.** Not very innovative, not very difficult, but I suppose it could be quite useful for people being new to R as an easy example of how programming in R may work. Furthermore, it is an application of the nice **rpanel package**.

For this program being very simple I skipped most comments on the code – but will add some more in the near future. The variables should be quite self-explaining. If not, feel free to write a comment. Of course more experienced programmers are welcomed to improve the code. ðŸ™‚

**Usage**: Run the code in R, use the sliders of the panel to choose the number of dice to throw, the number of throws and hit the *Throw!* button.

This small program enables you to investigate or illustrate, respectively, some aspects of convergence or simply to get a feeling for your chances to win your next dice game. Feel free to use the program for didactical purposes if you find it useful (see the license in the footer of this page). If you want to have reproducable results set a random number seed of your choice by using the *set.seed()* function implemented in R.

Happy R-ing.

The code:

#---------------- #A dice game by Christian Theel #---------------- #install.packages("rpanel") library(rpanel) dicegame<-function(panel){ nthrows<-panel$nthrows ndice<-panel$ndice #ndice<-2 throws<-matrix(nrow=nthrows,ncol=ndice) for (x in 1:ndice) { throws[,x]<-runif(nthrows) } dicesum<-c(1:nthrows) i<-1 j<-1 k<-1 for (i in 1:nthrows){ for (j in 1:ndice){ for (k in 1:6){ if ((k-1)/6 <= throws[i,j] && throws[i,j] < k/6) {throws[i,j]<-k} } } dicesum[i]<-sum(throws[i,]) } frequs<-table(dicesum) #compute point frequencies of dice sums relfrequs<-frequs/nthrows #compute relative frequencies par(mar=c(5, 4, 4, 4) + 0.1) barplot(relfrequs,col="lightblue",ylim=c(0,max(relfrequs)+0.005),main="Dice Experiment",xlab="Sum of Dice Points",ylab="Relative Frequency",yaxt="n") #barplot with relative frequencies tickmarks<-seq(0,1,by=1/20) axis(side=2,at=tickmarks) axis(side=4,at=tickmarks,labels=tickmarks*nthrows) #right-hand side y-axis with absolute frequencies mtext("Absolute Frequency", side = 4,padj=3) #grid(nx=NA,ny=NULL) #optional grid panel # call the panel!!!!!!!, otherwise you get "Error in panel$intname : $ operator is invalid for atomic vectors" } panel = rp.control(title = "Dice Game by Christian Theel (quantonomic.com)",size=c(500,500)) rp.slider(panel,nthrows, 1,1000,action = I, showvalue = TRUE, title = "Number of throws", resolution=1) rp.slider(panel,ndice, 1,10,action = I, showvalue = TRUE, title = "Number of dice", resolution=1) rp.button(panel, action = dicegame, title = "Throw!")

MichaelReally helped me in dealing with the rpanel package. Thanks for the article!