Getting into the Rhythm: the euRovision sweepstake

Blogs home

Another month, another sweepstake to raise money for the Bath Cats & Dogs home!

This time, we picked the Eurovision song contest as our sweepstake of choice. After enjoying my first experience of using R to randomise the names for the previous sweepstake I decided to give it another go, but with a few tweaks.

Soundcheck

During my first attempt in R, issues arose when I had been (innocently!) allocated the favourite horse to win. I had no way to prove that the R code had made the selection, as my work was not reproducible.

So with the cries of “cheater!” and “fix!”” still ringing in my ears, we started by setting a seed. This meant that if someone else was to replicate my code they would get the same results; therefore removing the dark smudge against my good name.

At random I selected the number 6 at which to set my seed.

set.seed(6)

I next compiled my lists of people and Eurovision countries and associated them with correlating objects.

people_list <- c(
    "Andy M",
    "Adam",
    "Laura",
    "Rachel",
    "Owen",
    "Yvi",
    "Karis",
    "Toby",
    "Jen",
    "Matty G",
    "Tatiana",
    "Amanda",
    "Chrissy",
    "Lisa",
    "Lisa",
    "Ben",
    "Ben",
    "Robert",
    "Toby",
    "Matt A",
    "Lynn",
    "Ruth",
    "Julian",
    "Karina",
    "Colin",
    "Colin")
countries_list <- c(
    "Albania",
    "Australia",
    "Austria",
    "Bulgaria",
    "Cyprus",
    "Czech Rep",
    "Denmark",
    "Estonia",
    "Finland",
    "France",
    "Germany",
    "Hungary",
    "Ireland",
    "Israel",
    "Italy",
    "Lithuania",
    "Moldova",
    "Norway",
    "Portugal",
    "Serbia",
    "Slovenia",
    "Spain",
    "Sweden",
    "The Netherlands",
    "Ukraine",
    "United Kingdom"
  )

Once I had the lists associated with objects, I followed the same steps as my previous attempt in R. I put both objects into data frames and then used the sample function to jumble up the names.

assign_countries <- data.frame(people = people_list,
                               countries = sample(countries_list))

Task complete!

Fate had delivered me Denmark, who were nowhere near the favourites at the point of selection. I sighed with relief knowing that I had no chance of winning again and that perhaps maybe now I could start to re-build my reputation as an honest co-worker...

Encore

Before I finished my latest foray into R, we decided to create a function for creating sweepstakes in R.

I was talked down from picking the name SweepstakeizzleR and decided upon the slightly more sensible sweepR.

I entered the desired workings of the function, which followed from the above work in R.

sweepR <- function(a, b, seed = 1234){
 set.seed(seed)
 data.frame(a, sample(b))
}

Once done, I could use my newly created function to complete the work I had done before but in a much timelier fashion.

sweepR(people_list, countries_list)

My very first function worked! Using a function like sweepR will allow me to reliably reproduce the procedures I need for whatever task I'm working on. In this case it has enabled me to create a successfully random sweepstake mix of names and entries.

WinneR

With great relief Israel won Eurovision and I was very happy to hand over the prize to Amanda.

I really enjoyed learning a little more about R and how I can create functions to streamline my work. Hopefully another reason will come up for me to learn even more soon!