The ‘switch’ function in R is useful when you have more than two choices based on a condition. If you remember ‘if’ and ‘ifelse’ are useful when there are two choices for a condition. However, using if/else statements for multiple choices is possible but somewhat confusing. Thus the ‘switch’ function is available for simplicity.
One problem with the ‘switch’ function is that you can not use vectors as the input to the function. This means that you have to manually calculate the value for each data point yourself. There is a way around this but that is the topic of a future post. For now, we will look at how to use the ‘switch’ function.
Switch Function
The last time we discussed R Programming we had setup the “CashDonate” to calculate how much James would give for dollars per point and how much the owner would much James based on whether it was a home or away game. Below is the code.
CashDonate <- function(points, HomeGame=TRUE){ JamesDonate<- points * ifelse(points > 100, 30, 40) totalDonation<- JamesDonate * ifelse(HomeGame, 1.5, 1.3) round(totalDonation) }
Now the team will have several international games outside the country. For these games, the owner will double whatever James donates. We now have three choices in our code.
- Home game multiple by 1.5
- Away game multiple by 1.3
- International game multiple by 2
It is possible to use the ‘if/else’ function but it is complicated to code, especially for beginners. Instead, we will use the ‘switch’ function which allows R to switch between multiple options within the argument. Below is the new code.
CashDonate <- function(points, GameType){ JamesDonate<- points * ifelse(points > 100, 30, 40) OwnerRate<- switch(GameType, Home = 1.5, Away = 1.3, International = 2) totalDonation<-JamesDonate * OwnerRate round(totalDonation) }
Here is what the code does
- The function ‘CashDonate’ has the arguments ‘points’ and ‘Gametype’
- ‘JamesDonate’ is ‘points’ multiply by 30 if more than 100 points are scored or 40 if less than 100 points are scored
- ‘OwnerRate’ is new as it uses the ‘switch’ function. If the ‘GameType’ is ‘Home’ the amount from ‘JamesDonate’ is multiplied by 1.5, ‘Away’ is multiplied by 1.3 and ‘International’ is multiplied by 2. The results of this is inputted into ‘totalDonation’
- Lastly, the results in ‘totalDonation’ are rounded using the ’round’ function.
Since there are three choices for ‘GameType’ we use the switch function for this. You can input different values into the modified ‘CashDonate’ function. Below are several examples
> CashDonate(88, GameType="Away") [1] 4576
> CashDonate(130, GameType="International") [1] 7800
> CashDonate(102, GameType="Home") [1] 4590
The next time we discuss R programming, I will explain how to use overcome the problem of inputting each value into the function manually.
Pingback: Using ‘for’ Loops in R | educationalresearchtechniques
Pingback: Switch Function in R | Education and Research |...