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

## Factor

• A factor reading: “A”, “B”, “C”
Letters_fac <- factor(x = c("A", "B", "C"))
Letters_fac
## [1] A B C
## Levels: A B C
length(Letters_fac)
## [1] 3
• A factor reading: 1, 2, 3
Numbers_fac <- factor(x = c(1, 2, 3))
Numbers_fac
## [1] 1 2 3
## Levels: 1 2 3
length(Numbers_fac)
## [1] 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] 1    2    <NA>
## Levels: 1 2
length(Constrained_fac)
## [1] 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] 1 2 3
## Levels: 1 2 3 4
length(Expanded_fac)
## [1] 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)
## [1] 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)
## [1] 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)
## [1] 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)
## [1] 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)
## [1] 3 2

## List

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

# Statements and Loops

## Statements

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

## Loops

• Print each element of Vectors_ls
for(i in 1:length(Vectors_ls)){
print(Vectors_ls[[i]])
}
## [1] 1 2 3
## [1] "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])
}
## [1] 2
## [1] 3
## [1] 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])
}
## [1] 0
## [1] 1
## [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
##  [1] "Big_vec"         "Combine_df"      "Combine_mat"     "Constrained_fac"
##  [5] "Expanded_fac"    "i"               "Letters_fac"     "Letters_vec"
##  [9] "Mat_column"      "Names_df"        "Names_mat"       "Numbers_fac"
## [13] "Numbers_vec"     "Numbers_veca"    "Pivot_mat"       "Seq_vec"
## [17] "Vectors_ls"
rm(list=ls())
Previous