# Theory

These are the solutions to the exercises contained within the handout to Introduction to R which walks you through the basics of the `R` machinery. `R` is a coding language that can be highly individualised and hence there are often multiple solutions to the same problem. Within these solutions, I shall only present you with one solution for every given task. However, do keep in mind that there is probably a myriad of other ways to achieve your goal.

I have prepared some Lecture Slides for this session.

# Creating and Inspecting Objects

## Vector

• A vector reading: “A”, “B”, “C”
``````Letters_vec <- c("A", "B", "C")
Letters_vec``````
``##  "A" "B" "C"``
``length(Letters_vec)``
``##  3``
• A vector reading: 1, 2, 3
``````Numbers_vec <- c(1, 2, 3)
Numbers_vec``````
``##  1 2 3``
``length(Numbers_vec)``
``##  3``
• A vector reading: `TRUE`, `FALSE`
``````Logic_vec <- c(TRUE, FALSE)
Logic_vec``````
``##   TRUE FALSE``
``length(Logic_vec)``
``##  2``
• A vector of the elements of the first three vectors
``````Big_vec <- c(Letters_vec, Numbers_vec, Logic_vec)
Big_vec``````
``##  "A"     "B"     "C"     "1"     "2"     "3"     "TRUE"  "FALSE"``
``length(Big_vec)``
``##  8``
• A vector reading as a sequence of full numbers from 1 to 20
``````Seq_vec <- c(1:20)
Seq_vec``````
``##    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20``
``length(Seq_vec)``
``##  20``

## Factor

• A factor reading: “A”, “B”, “C”
``````Letters_fac <- factor(x = c("A", "B", "C"))
Letters_fac``````
``````##  A B C
## Levels: A B C``````
``length(Letters_fac)``
``##  3``
• A factor reading: 1, 2, 3
``````Numbers_fac <- factor(x = c(1, 2, 3))
Numbers_fac``````
``````##  1 2 3
## Levels: 1 2 3``````
``length(Numbers_fac)``
``##  3``
• A factor reading: 1, 2, 3 but only levels 1 and 2 are allowed
``````Constrained_fac <- factor(x = c(1,2,3), levels = c(1,2))
Constrained_fac``````
``````##  1    2    <NA>
## Levels: 1 2``````
``length(Constrained_fac)``
``##  3``
• A factor reading: 1, 2, 3 levels 1 - 4 are allowed
``````Expanded_fac <- factor(x = c(1,2,3), levels = c(1,2,3,4))
Expanded_fac``````
``````##  1 2 3
## Levels: 1 2 3 4``````
``length(Expanded_fac)``
``##  3``

## Matrix

• The first two vectors we established in distinct columns of a matrix
``````Combine_mat <- matrix(data = c(Numbers_vec, Letters_vec), ncol = 2)
Combine_mat``````
``````##      [,1] [,2]
## [1,] "1"  "A"
## [2,] "2"  "B"
## [3,] "3"  "C"``````
``dim(Combine_mat)``
``##  3 2``
• The first two vectors we established in distinct rows of a matrix
``````Pivot_mat <- matrix(data = c(Numbers_vec, Letters_vec), nrow = 2, byrow = TRUE)
Pivot_mat``````
``````##      [,1] [,2] [,3]
## [1,] "1"  "2"  "3"
## [2,] "A"  "B"  "C"``````
``dim(Pivot_mat)``
``##  2 3``
• The above matrix with meaningful names
``````Names_mat <- Pivot_mat
dimnames(Names_mat) <- list(c("Numbers", "Letters"))
Names_mat``````
``````##         [,1] [,2] [,3]
## Numbers "1"  "2"  "3"
## Letters "A"  "B"  "C"``````
``dim(Names_mat)``
``##  2 3``

## Data Frame

• The first matrix we established as a data frame
``````Combine_df <- data.frame(Combine_mat)
Combine_df``````
``````##   X1 X2
## 1  1  A
## 2  2  B
## 3  3  C``````
``dim(Combine_df)``
``##  3 2``
• The previous data frame with meaningful names
``````Names_df <- Combine_df
colnames(Names_df) <- c("Numbers", "Letters")
Names_df``````
``````##   Numbers Letters
## 1       1       A
## 2       2       B
## 3       3       C``````
``dim(Names_df)``
``##  3 2``

## List

• The first two vectors we created
``````Vectors_ls <- list(Numbers_vec, Letters_vec)
Vectors_ls``````
``````## []
##  1 2 3
##
## []
##  "A" "B" "C"``````
``length(Vectors_ls)``
``##  2``

# Statements and Loops

## Statements

• `Numbers_vec` contains more elements than `Letters_fac`?
``length(Numbers_vec) > length(Letters_fac)``
``##  FALSE``
• The first column of `Combine_df` is shorter than `Vectors_ls`?
``length(Combine_df[,1]) < length(Vectors_ls)``
``##  FALSE``
• The elements of `Letters_vec` are the same as the elements of `Letters_fac`?
``Letters_vec == Letters_fac``
``##  TRUE TRUE TRUE``

## Loops

• Print each element of `Vectors_ls`
``````for(i in 1:length(Vectors_ls)){
print(Vectors_ls[[i]])
}``````
``````##  1 2 3
##  "A" "B" "C"``````
• Print each element of `Numbers_vec` + 1
``````Numbers_veca <- Numbers_vec +1
for(i in 1:length(Numbers_veca)){
print(Numbers_veca[i])
}``````
``````##  2
##  3
##  4``````
• Subtract 1 from each element of the first column of `Combine_mat` and print each element separately
``````Mat_column <- Combine_mat[,1] # extract data
Mat_column <- as.numeric(Mat_column) # convert to numeric
Mat_column <- Mat_column-1 # substract 1
for(i in 1:length(Mat_column)){
print(Mat_column[i])
}``````
``````##  0
##  1
##  2``````

# Useful Commands

• Read out your current working directory (not showing you the result as it is different on every machine, it should start like this “C:/Users/….”)
``getwd()``
• Inspect the `Vectors_ls` object using the `View()` function (again, I am not showing you the result as this only works directly in `R` or Rstudio)
``View(Vectors_ls)``
• Inspect the `Combine_df` object using the `View()` function (again, I am not showing you the result as this only works directly in `R` or Rstudio)
``View(Combine_df)``
• Get the help documentation for the `as.matrix()` function (again, I am not showing you the result as this only works directly in `R` or Rstudio)
``?as.matrix``
• Install and load the `dplyr` package
``````install.packages("dplyr")
library(dplyr)``````
• Remove the `Logic_vec` object from your working environment
``rm(Logic_vec)``
• Clear your entire working environment
``ls() # this command shows you all the object in the environment``
``````##   "Big_vec"         "Combine_df"      "Combine_mat"     "Constrained_fac"
##   "Expanded_fac"    "i"               "Letters_fac"     "Letters_vec"
##   "Mat_column"      "Names_df"        "Names_mat"       "Numbers_fac"
##  "Numbers_vec"     "Numbers_veca"    "Pivot_mat"       "Seq_vec"
##  "Vectors_ls"``````
``rm(list=ls())``
Previous