---
title: "Lab 4 Solution"
author: "Your Name Here"
date: ""
output: html_document
---
##### Remember to change the `author: ` field on this Rmd file to your own name.
```{r}
library(tidyverse)
Cars93 <- MASS::Cars93
```
#### 1. Loop practice
**(a)** Write a function called `calculateRowMeans` that uses a **for loop** to calculate the row means of a matrix `x`.
```{r}
# calculateRowMeans computes the row means of a matrix x
# input: matrix x
# output: vector of length nrow(x) giving row means of x
calculateRowMeans <- function(x) {
row.means <- numeric(nrow(x))
for(i in 1:nrow(x)) {
row.means[i] <- mean(x[i,])
}
row.means
}
```
**(b)** Try out your function on the random matrix `fake.data` defined below.
```{r}
set.seed(12345) # Set seed of random number generator
fake.data <- matrix(runif(800), nrow=25)
calculateRowMeans(fake.data)
```
**(c)** Use the `apply()` function to calculate the row means of the matrix `fake.data`
```{r}
apply(fake.data, MARGIN=1, FUN=mean)
```
**(d)** Compare this to the output of the `rowMeans()` function to check that your calculation is correct.
```{r}
identical(calculateRowMeans(fake.data), apply(fake.data, MARGIN=1, FUN=mean))
```
### 2. summarize() practice
**(a)** Use `group_by()` and `summarize()` commands on the Cars93 data set to create a table showing the average `Turn.circle` of cars, broken down by vehicle `Type` and `DriveTrain`
```{r}
Cars93 %>%
group_by(Type, DriveTrain) %>%
summarize(mean(Turn.circle))
```
**(b)** Are all combinations of Type and DriveTrain shown in the table? If not, which ones are missing? Why are they missing?
> Some are missing. E.g., there is no entry for Large 4WD cars. This is because there are no vehicles in this category.
```{r}
sum(Cars93$Type == "Large" & Cars93$DriveTrain == "4WD")
```
**(c)** Add the argument `.drop = FALSE` to your `group_by` command, and then re-run your code. What happens now?
```{r}
Cars93 %>%
group_by(Type, DriveTrain, .drop = FALSE) %>%
summarize(mean(Turn.circle))
```
> The `.drop` argument, which is set to `TRUE` by default, controls whether variable combinatinos that never appear together are dropped. When we set `.drop = FALSE` the combinations with 0 counts still appear in the table, but the summary shows `NaN` in that cell (not a number).
**(d)** Having a car with a small turn radius makes city driving much easier. What Type of car should city drivers opt for?
> Small cars appear to have smaller turn radii.
**(e)** Does the vehicle's `DriveTrain` appear to have an impact on turn radius?
> There is no consistent association.