--- 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.