---
title: "Lab 4"
author: "Your Name Here"
output: html_document
---

##### Remember to change the `author: ` field on this Rmd file to your own name.

### Learning objectives

> In today's Lab you will gain practice with the following concepts from Lecture 4:

>- Using **loops** to iterate through a data set
- Alternatives to loops such as the **`apply`** apply
- Using the various **`summarize`** commands to produce simple tabular summaries, and interpreting the results

## Problems

```{r}
library(tidyverse)
Cars93 <- as_tibble(MASS::Cars93)  # Pull Cars93 from MASS
```

### 1. Loop practice

**(a)** Write a function called `calculateRowMeans` that uses a **for loop** to calculate the row means of a matrix `x`.

```{r}
# Edit me
```

**(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)
```

**(c)** Use the `apply()` function to calculate the row means of the matrix `fake.data`

```{r}
# Edit me
```

**(d)** Compare this to the output of the `rowMeans()` function to check that your calculation is correct.

```{r}
# Edit me
```



### 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}
# Edit me
```


**(b)** Are all combinations of Type and DriveTrain shown in the table?  If not, which ones are missing?  Why are they missing?

> Replace this text with your solution.

**(c)** Add the argument `.drop = FALSE` to your `group_by` command, and then re-run your code. What happens now?

```{r}
# Edit me
```

> Replace this text with your solution.

**(d)** Having a car with a small turn radius makes city driving much easier.  What Type of car should city drivers opt for?

> Replace this text with your solution.

**(e)** Does the vehicle's `DriveTrain` appear to have an impact on turn radius?  

> Replace this text with your solution.

### 3. map() and _at() practice

**(a)** The `nlevels` command tells you the number of levels in a factor variable.  Use this function in combination with `summarize_if()` to produce an integer vector showing the number of levels for each factor variables in the Cars93 data.

```{r}
# Edit me
```

**(b)** `levels()` returns the possible levels of a factor variable. Use this function in combination with `select` and `map` to create a list of all the levels of the Manufacturer, AirBags, DriveTrain, and Man.trans.avail variables

```{r}
# Edit me
```

**(c)** Use the `toupper()` command in combination with `mutate_if()` to produce a new version of Cars93 where every factor variable has been converted to upper case.  

```{r}
# Edit me
```
