+ - 0:00:00
Notes for current slide
Notes for next slide

STA 517 3.0 Programming and Statistical Computing with R

🛠️ Data Structures in R

Dr Thiyanga Talagala

1

Today's menu

  • Vector

  • Matrix

  • Array

  • Data Frame

  • List

2

Image Credit: venus.ifca.unican.es

3

Image Credit: venus.ifca.unican.es

4

Recap

Write an R code to create the following vector?

[1] 1 2 3 4 5 5 4 3 2 1
5

Recap

Write an R code to create the following vector?

[1] 1 2 3 4 5 5 4 3 2 1
  • Method 1
c(1, 2, 3, 4, 5, 5, 4, 3, 2, 1)
6

Recap

Write an R code to create the following vector?

[1] 1 2 3 4 5 5 4 3 2 1
  • Method 1
c(1, 2, 3, 4, 5, 5, 4, 3, 2, 1)
  • Method 2
c(1:5, 5:1)
02:00
7

Recap

  • Name elements
a <- c(1:5, 5:1)
a
[1] 1 2 3 4 5 5 4 3 2 1
names(a) <- c("a1", "a2", "a3", "a4", "a5", "b1", "b2", "b3", "b4", "b5")
a
a1 a2 a3 a4 a5 b1 b2 b3 b4 b5
1 2 3 4 5 5 4 3 2 1
8

Operations between vectors

a
a1 a2 a3 a4 a5 b1 b2 b3 b4 b5
1 2 3 4 5 5 4 3 2 1
a * c(10, 100)
a1 a2 a3 a4 a5 b1 b2 b3 b4 b5
10 200 30 400 50 500 40 300 20 100
9

Vectors: subsetting

Select some particular elements (i.e., a subset) from a vector.

10

Vectors: Subsetting

myvec <- 1:20; myvec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
11

Vectors: Subsetting

myvec <- 1:20; myvec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
myvec[1]
[1] 1
12

Vectors: Subsetting

myvec <- 1:20; myvec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
myvec[1]
[1] 1
myvec[5:10]
[1] 5 6 7 8 9 10
13

Vectors: Subsetting (cont.)

14

Vectors: Subsetting (cont.)

myvec[-1]
[1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
15

Vectors: Subsetting (cont.)

myvec[-1]
[1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
myvec[myvec > 3]
[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
16

vector subsetting - special cases

myvec[0]
integer(0)
myvec[]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
myvec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
17
  • Extract elements present in vector a from myvec (cont.).
a; myvec
a1 a2 a3 a4 a5 b1 b2 b3 b4 b5
1 2 3 4 5 5 4 3 2 1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
myvec %in% a
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
myvec[myvec %in% a]
[1] 1 2 3 4 5
18

Vectors: Subsetting (cont.)

myvec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
b <- 100:105
b
[1] 100 101 102 103 104 105
myvec[myvec %in% b]
integer(0)
19

Your turn

20
  1. Generate a sequence using the code seq(from=1, to=10, by=1).

  2. What other ways can you generate the same sequence?

  3. Using the function rep , create the below sequence 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4

03:00
21

Changing values of a vector

covid <- c(100, 30, 40, 50, -1, 100)
covid
[1] 100 30 40 50 -1 100
covid[1] <- 50000
covid
[1] 50000 30 40 50 -1 100
22

Changing values of a vector (cont.)

covid[covid < 0] <- 0
covid
[1] 50000 30 40 50 0 100
covid[c(1, 2)] <- c(1000, 10000)
covid
[1] 1000 10000 40 50 0 100
23
24

2. Matrices

25
26

Matrix is a 2-dimentional and a homogeneous data structure

Syntax to create a matrix

matrix_name <- matrix(vector_of_elements,
nrow=number_of_rows,
ncol=number_of_columns,
byrow=logical_value, # If byrow=TRUE, then the matrix is filled in by row.
dimnames=list(rnames, cnames)) # To assign row names and columns

Example

matrix(1:6, nrow=2, ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
27

cont.

matrix(1:6, nrow=2)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
matrix(1:6, ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
28

Matrix fill by rows/ columns

values <- c(10, 20, 30, 40)
matrix1 <- matrix(values, nrow=2) # Matrix filled by columns (default option)
matrix1
[,1] [,2]
[1,] 10 30
[2,] 20 40
matrix2 <- matrix(values, nrow=2, byrow=TRUE) # Matrix filled by rows
matrix2
[,1] [,2]
[1,] 10 20
[2,] 30 40
29

Matrix fill by rows/ columns (cont.)

  • byrow=TRUE: matrix is filled in by row

  • byrow=FALSE: matrix is filled in by column

  • Default is by column

30

Naming matrix rows and columns

rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
matrix_with_names <- matrix(values, nrow=2, dimnames=list(rnames, cnames))
matrix_with_names
C1 C2
R1 10 30
R2 20 40
31

class function on vectors vs matrices

with vectors

vec <- 1:10
class(vec)
[1] "integer"

with matrices

mat <- matrix(1:10, ncol=5)
class(mat)
[1] "matrix" "array"
32

Matrix: subsetting

33

Matrix: subsetting

matrix1
[,1] [,2]
[1,] 10 30
[2,] 20 40

matraix_name[i, ] gives the ith row of a matrix

matrix1[1, ]
[1] 10 30

matraix_name[, j] gives the jth column of a matrix

matrix1[, 2]
[1] 30 40
34

Matrix: subsetting (cont.)

matraix_name[i, j] gives the ith row and jth column element

matrix1
[,1] [,2]
[1,] 10 30
[2,] 20 40
matrix1[1, 2]
[1] 30
matrix1[1, c(1, 2)]
[1] 10 30
35

Beware!

amat <- matrix(10:90, 3, 3); amat
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
bmat <- amat[1:2,]; bmat
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
class(bmat)
[1] "matrix" "array"
36
cmat <- amat[1,]; cmat
[1] 10 13 16
class(cmat)
[1] "integer"
dmat <- amat[, 1]; dmat
[1] 10 11 12
class(dmat)
[1] "integer"
37

drop = FALSE

cmat <- amat[1,]; cmat
[1] 10 13 16
class(cmat)
[1] "integer"
cmat <- amat[1, , drop = FALSE]; cmat
[,1] [,2] [,3]
[1,] 10 13 16
class(cmat)
[1] "matrix" "array"
38

Diagonal elements

a <- matrix(1:9, ncol=3)
a
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
diag(a)
[1] 1 5 9
39

Replacing elements in a matrix

a <- matrix(1:9, ncol=3); a
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
a[1, 1] <- 100; a
[,1] [,2] [,3]
[1,] 100 4 7
[2,] 2 5 8
[3,] 3 6 9
diag(a) <- 0
a
[,1] [,2] [,3]
[1,] 0 4 7
[2,] 2 0 8
[3,] 3 6 0
40

cbind and rbind

Matrices can be created by column-binding and row-binding with cbind() and rbind()

x <- 1:3
y <- c(10, 100, 1000)
cbind(x, y) # binds matrices horizontally
x y
[1,] 1 10
[2,] 2 100
[3,] 3 1000
rbind(x, y) #binds matrices vertically
[,1] [,2] [,3]
x 1 2 3
y 10 100 1000
41
rbind(x, y) #binds matrices vertically
[,1] [,2] [,3]
x 1 2 3
y 10 100 1000
42

cbind and rbind (cont.)

a <- matrix(1:3, ncol=3); a
[,1] [,2] [,3]
[1,] 1 2 3
b <- matrix(c(10, 100, 1000),
ncol=3)
b
[,1] [,2] [,3]
[1,] 10 100 1000
cbind(a, b) # binds matrices horizontally
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 10 100 1000
rbind(a, b) #binds matrices vertically
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 10 100 1000
43

Matrix operations

44

Matrix operations

Transpose

t(x)
[,1] [,2] [,3]
[1,] 1 2 3
45

Matrix multiplication

y <- matrix(seq(10, 60, by=10), nrow=3)
z <- x %*% y
z
[,1] [,2]
[1,] 140 320
46

Matrix operations (cont.)

  • matrix inverse is solve()

Find x in: m*x=n

solve(m, n)
47

Your turn

48
05:00
49

β^=(XTX)1XTY

50
05:00
51

Logical operators with matrices

a <- matrix(c(1:12), nrow = 3, ncol = 4)
a > 10
[,1] [,2] [,3] [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE TRUE
[3,] FALSE FALSE FALSE TRUE
b <- matrix(1:4, ncol=4)
a > b # Error

%in% operator

b %in% a
[1] TRUE TRUE TRUE TRUE
a %in% b
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
class(a %in% b)
[1] "logical"
52

3. Arrays

53
54

Array

  • data structures for storing higher dimensional data.

  • a homogeneous data structure.

  • a special case of the array is the matrix.

array(vector, dimensions, dimnames) #dimnames-as a list
a <- array(c(10, 20, 30, 40, 50, 60), c(1, 2, 3))
55
a <- array(c(10, 20, 30, 40, 50, 60), c(1, 2, 3))
a
, , 1
[,1] [,2]
[1,] 10 20
, , 2
[,1] [,2]
[1,] 30 40
, , 3
[,1] [,2]
[1,] 50 60
56

Array

57

Subsetting arrays

a
, , 1
[,1] [,2]
[1,] 10 20
, , 2
[,1] [,2]
[1,] 30 40
, , 3
[,1] [,2]
[1,] 50 60
a[, , 1] # Extract first entry
[1] 10 20
58

Subsetting arrays (cont.)

a
, , 1
[,1] [,2]
[1,] 10 20
, , 2
[,1] [,2]
[1,] 30 40
, , 3
[,1] [,2]
[1,] 50 60
a[1, ,] # All rows in each entry
[,1] [,2] [,3]
[1,] 10 30 50
[2,] 20 40 60
59

Your turn

60
  1. Create the following matrix using the array function
matrix(1:20, ncol=5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
02:00
61

Array with dimnames

dim1 <- c("A1", "A2"); dim2 <- c("B1", "B2", "B3"); dim3 <- c("c1", "c2", "c3", "c4")
z <- array(1:24, c(2, 3, 4), dimnames = list(dim1, dim2, dim3))
z
, , c1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , c2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , c3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , c4
B1 B2 B3
A1 19 21 23
A2 20 22 24
62
, , c1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , c2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , c3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , c4
B1 B2 B3
A1 19 21 23
A2 20 22 24
63

64

4. Data Frames

65
66

Data frames

  • Rectangular arrangement of data with rows corresponding to observational units and columns corresponding to variables.

  • More general than a matrix in that different columns can contain different modes of data.

  • It’s similar to the datasets you’d typically see in SPSS and MINITAB.

  • Data frames are the most common data structure you’ll deal with in R.

67

Figure 1: Components of a dataframe.

Image Credit: Hadley Wickham

68

Create a data frame

Syntax

name_of_the_dataframe <- data.frame(
var1_name=vector of values of the first variable,
var2_names=vector of values of the second variable)

Example

corona <- data.frame(ID=c("C001", "C002", "C003", "C004"),
Location=c("Beijing", "Wuhan", "Shanghai", "Beijing"),
Test_Results=c(FALSE, TRUE, FALSE, FALSE))
69
corona
ID Location Test_Results
1 C001 Beijing FALSE
2 C002 Wuhan TRUE
3 C003 Shanghai FALSE
4 C004 Beijing FALSE

To check if it is a dataframe

is.data.frame(corona)
[1] TRUE
70

Some useful functions with dataframes

colnames(corona)
[1] "ID" "Location" "Test_Results"
length(corona)
[1] 3
dim(corona)
[1] 4 3
nrow(corona)
[1] 4
ncol(corona)
[1] 3
71

Some useful functions with dataframes (cont.)

summary(corona)
ID Location Test_Results
Length:4 Length:4 Mode :logical
Class :character Class :character FALSE:3
Mode :character Mode :character TRUE :1
str(corona)
'data.frame': 4 obs. of 3 variables:
$ ID : chr "C001" "C002" "C003" "C004"
$ Location : chr "Beijing" "Wuhan" "Shanghai" "Beijing"
$ Test_Results: logi FALSE TRUE FALSE FALSE
72

Convert a matrix to a dataframe

mat <- matrix(1:16, ncol=4)
mat
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
mat_df <- as.data.frame(mat)
mat_df
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
4 4 8 12 16
73

Subsetting data frames

Select rows

head(mat_df) # default it shows 5 rows
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
4 4 8 12 16
head(mat_df, 3) # To extract only the first three rows
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
tail(mat_df, 2)
V1 V2 V3 V4
3 3 7 11 15
4 4 8 12 16
74

Subsetting data frames

mat_df
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
4 4 8 12 16

To select some specific rows

mat_df[4, ]
V1 V2 V3 V4
4 4 8 12 16
index <- c(1, 3)
mat_df[index, ]
V1 V2 V3 V4
1 1 5 9 13
3 3 7 11 15
75

Subsetting data frames: select columns

mat_df
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
4 4 8 12 16

Select column(s) by variable names

mat_df$V1 # Method 1
[1] 1 2 3 4
mat_df[, "V1"] # Method 2
[1] 1 2 3 4
76

Subsetting data frames: select columns

mat_df
V1 V2 V3 V4
1 1 5 9 13
2 2 6 10 14
3 3 7 11 15
4 4 8 12 16

Select column(s) by index

mat_df[, 2]
[1] 5 6 7 8
77

Your turn

78
03:00
79

Built-in dataframes

80

Built-in dataframes

data(iris)

Use help function to find more about the iris dataset.

81
82

iris dataset

head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

83
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

84
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
  • Introduced by Sir Ronald A. Fisher, 1936

85

Use the R dataset “iris” to answer the following questions:

  1. How many rows and columns does iris have?

  2. Select the first 4 rows.

  3. Select the last 6 rows.

  4. Select rows 10 to 20, with all columns in the iris dataset.

  5. Select rows 10 to 20 with only the Species, Petal.Width and Petal.Length.

05:00
86

cont.

  1. Create a single vector (a new object) called ‘width’ that is the Sepal.Width column of iris.

  2. What are the column names and data types of the different columns in iris?

  3. How many rows in the iris dataset have Petal.Length larger than 5 and Sepal.Width smaller than 3?

05:00
87

5. List

88
89

List

  • Lists are heterogeneous

Syntax

list_name <- list(entry1, entry2, entry3, ...)

Example

first_list <-list(1:3, matrix(1:6, nrow=2), iris)
90

List (str)

first_list <-list(1:3, matrix(1:6, nrow=2), iris)
first_list
[[1]]
[1] 1 2 3
[[2]]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[[3]]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
12 4.8 3.4 1.6 0.2 setosa
13 4.8 3.0 1.4 0.1 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
16 5.7 4.4 1.5 0.4 setosa
17 5.4 3.9 1.3 0.4 setosa
18 5.1 3.5 1.4 0.3 setosa
19 5.7 3.8 1.7 0.3 setosa
20 5.1 3.8 1.5 0.3 setosa
21 5.4 3.4 1.7 0.2 setosa
22 5.1 3.7 1.5 0.4 setosa
23 4.6 3.6 1.0 0.2 setosa
24 5.1 3.3 1.7 0.5 setosa
25 4.8 3.4 1.9 0.2 setosa
26 5.0 3.0 1.6 0.2 setosa
27 5.0 3.4 1.6 0.4 setosa
28 5.2 3.5 1.5 0.2 setosa
29 5.2 3.4 1.4 0.2 setosa
30 4.7 3.2 1.6 0.2 setosa
31 4.8 3.1 1.6 0.2 setosa
32 5.4 3.4 1.5 0.4 setosa
33 5.2 4.1 1.5 0.1 setosa
34 5.5 4.2 1.4 0.2 setosa
35 4.9 3.1 1.5 0.2 setosa
36 5.0 3.2 1.2 0.2 setosa
37 5.5 3.5 1.3 0.2 setosa
38 4.9 3.6 1.4 0.1 setosa
39 4.4 3.0 1.3 0.2 setosa
40 5.1 3.4 1.5 0.2 setosa
41 5.0 3.5 1.3 0.3 setosa
42 4.5 2.3 1.3 0.3 setosa
43 4.4 3.2 1.3 0.2 setosa
44 5.0 3.5 1.6 0.6 setosa
45 5.1 3.8 1.9 0.4 setosa
46 4.8 3.0 1.4 0.3 setosa
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
52 6.4 3.2 4.5 1.5 versicolor
53 6.9 3.1 4.9 1.5 versicolor
54 5.5 2.3 4.0 1.3 versicolor
55 6.5 2.8 4.6 1.5 versicolor
56 5.7 2.8 4.5 1.3 versicolor
57 6.3 3.3 4.7 1.6 versicolor
58 4.9 2.4 3.3 1.0 versicolor
59 6.6 2.9 4.6 1.3 versicolor
60 5.2 2.7 3.9 1.4 versicolor
61 5.0 2.0 3.5 1.0 versicolor
62 5.9 3.0 4.2 1.5 versicolor
63 6.0 2.2 4.0 1.0 versicolor
64 6.1 2.9 4.7 1.4 versicolor
65 5.6 2.9 3.6 1.3 versicolor
66 6.7 3.1 4.4 1.4 versicolor
67 5.6 3.0 4.5 1.5 versicolor
68 5.8 2.7 4.1 1.0 versicolor
69 6.2 2.2 4.5 1.5 versicolor
70 5.6 2.5 3.9 1.1 versicolor
71 5.9 3.2 4.8 1.8 versicolor
72 6.1 2.8 4.0 1.3 versicolor
73 6.3 2.5 4.9 1.5 versicolor
74 6.1 2.8 4.7 1.2 versicolor
75 6.4 2.9 4.3 1.3 versicolor
76 6.6 3.0 4.4 1.4 versicolor
77 6.8 2.8 4.8 1.4 versicolor
78 6.7 3.0 5.0 1.7 versicolor
79 6.0 2.9 4.5 1.5 versicolor
80 5.7 2.6 3.5 1.0 versicolor
81 5.5 2.4 3.8 1.1 versicolor
82 5.5 2.4 3.7 1.0 versicolor
83 5.8 2.7 3.9 1.2 versicolor
84 6.0 2.7 5.1 1.6 versicolor
85 5.4 3.0 4.5 1.5 versicolor
86 6.0 3.4 4.5 1.6 versicolor
87 6.7 3.1 4.7 1.5 versicolor
88 6.3 2.3 4.4 1.3 versicolor
89 5.6 3.0 4.1 1.3 versicolor
90 5.5 2.5 4.0 1.3 versicolor
91 5.5 2.6 4.4 1.2 versicolor
92 6.1 3.0 4.6 1.4 versicolor
93 5.8 2.6 4.0 1.2 versicolor
94 5.0 2.3 3.3 1.0 versicolor
95 5.6 2.7 4.2 1.3 versicolor
96 5.7 3.0 4.2 1.2 versicolor
97 5.7 2.9 4.2 1.3 versicolor
98 6.2 2.9 4.3 1.3 versicolor
99 5.1 2.5 3.0 1.1 versicolor
100 5.7 2.8 4.1 1.3 versicolor
101 6.3 3.3 6.0 2.5 virginica
102 5.8 2.7 5.1 1.9 virginica
103 7.1 3.0 5.9 2.1 virginica
104 6.3 2.9 5.6 1.8 virginica
105 6.5 3.0 5.8 2.2 virginica
106 7.6 3.0 6.6 2.1 virginica
107 4.9 2.5 4.5 1.7 virginica
108 7.3 2.9 6.3 1.8 virginica
109 6.7 2.5 5.8 1.8 virginica
110 7.2 3.6 6.1 2.5 virginica
111 6.5 3.2 5.1 2.0 virginica
112 6.4 2.7 5.3 1.9 virginica
113 6.8 3.0 5.5 2.1 virginica
114 5.7 2.5 5.0 2.0 virginica
115 5.8 2.8 5.1 2.4 virginica
116 6.4 3.2 5.3 2.3 virginica
117 6.5 3.0 5.5 1.8 virginica
118 7.7 3.8 6.7 2.2 virginica
119 7.7 2.6 6.9 2.3 virginica
120 6.0 2.2 5.0 1.5 virginica
121 6.9 3.2 5.7 2.3 virginica
122 5.6 2.8 4.9 2.0 virginica
123 7.7 2.8 6.7 2.0 virginica
124 6.3 2.7 4.9 1.8 virginica
125 6.7 3.3 5.7 2.1 virginica
126 7.2 3.2 6.0 1.8 virginica
127 6.2 2.8 4.8 1.8 virginica
128 6.1 3.0 4.9 1.8 virginica
129 6.4 2.8 5.6 2.1 virginica
130 7.2 3.0 5.8 1.6 virginica
131 7.4 2.8 6.1 1.9 virginica
132 7.9 3.8 6.4 2.0 virginica
133 6.4 2.8 5.6 2.2 virginica
134 6.3 2.8 5.1 1.5 virginica
135 6.1 2.6 5.6 1.4 virginica
136 7.7 3.0 6.1 2.3 virginica
137 6.3 3.4 5.6 2.4 virginica
138 6.4 3.1 5.5 1.8 virginica
139 6.0 3.0 4.8 1.8 virginica
140 6.9 3.1 5.4 2.1 virginica
141 6.7 3.1 5.6 2.4 virginica
142 6.9 3.1 5.1 2.3 virginica
143 5.8 2.7 5.1 1.9 virginica
144 6.8 3.2 5.9 2.3 virginica
145 6.7 3.3 5.7 2.5 virginica
146 6.7 3.0 5.2 2.3 virginica
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica
91

Structure of a list

str(first_list)
List of 3
$ : int [1:3] 1 2 3
$ : int [1:2, 1:3] 1 2 3 4 5 6
$ :'data.frame': 150 obs. of 5 variables:
..$ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
..$ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
..$ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
..$ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
92

Extract elements

first_list[[1]]
[1] 1 2 3
first_list[[3]]$Species
[1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
[13] setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa
[25] setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa
[49] setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor
[61] versicolor versicolor versicolor versicolor versicolor versicolor
[67] versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor
[79] versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor
[97] versicolor versicolor versicolor versicolor virginica virginica
[103] virginica virginica virginica virginica virginica virginica
[109] virginica virginica virginica virginica virginica virginica
[115] virginica virginica virginica virginica virginica virginica
[121] virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica
[133] virginica virginica virginica virginica virginica virginica
[139] virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
93

Name entries in a list

first_list_with_names <-list(a=1:3, b=matrix(1:6, nrow=2), c=iris)
first_list_with_names
$a
[1] 1 2 3
$b
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$c
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
12 4.8 3.4 1.6 0.2 setosa
13 4.8 3.0 1.4 0.1 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
16 5.7 4.4 1.5 0.4 setosa
17 5.4 3.9 1.3 0.4 setosa
18 5.1 3.5 1.4 0.3 setosa
19 5.7 3.8 1.7 0.3 setosa
20 5.1 3.8 1.5 0.3 setosa
21 5.4 3.4 1.7 0.2 setosa
22 5.1 3.7 1.5 0.4 setosa
23 4.6 3.6 1.0 0.2 setosa
24 5.1 3.3 1.7 0.5 setosa
25 4.8 3.4 1.9 0.2 setosa
26 5.0 3.0 1.6 0.2 setosa
27 5.0 3.4 1.6 0.4 setosa
28 5.2 3.5 1.5 0.2 setosa
29 5.2 3.4 1.4 0.2 setosa
30 4.7 3.2 1.6 0.2 setosa
31 4.8 3.1 1.6 0.2 setosa
32 5.4 3.4 1.5 0.4 setosa
33 5.2 4.1 1.5 0.1 setosa
34 5.5 4.2 1.4 0.2 setosa
35 4.9 3.1 1.5 0.2 setosa
36 5.0 3.2 1.2 0.2 setosa
37 5.5 3.5 1.3 0.2 setosa
38 4.9 3.6 1.4 0.1 setosa
39 4.4 3.0 1.3 0.2 setosa
40 5.1 3.4 1.5 0.2 setosa
41 5.0 3.5 1.3 0.3 setosa
42 4.5 2.3 1.3 0.3 setosa
43 4.4 3.2 1.3 0.2 setosa
44 5.0 3.5 1.6 0.6 setosa
45 5.1 3.8 1.9 0.4 setosa
46 4.8 3.0 1.4 0.3 setosa
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
52 6.4 3.2 4.5 1.5 versicolor
53 6.9 3.1 4.9 1.5 versicolor
54 5.5 2.3 4.0 1.3 versicolor
55 6.5 2.8 4.6 1.5 versicolor
56 5.7 2.8 4.5 1.3 versicolor
57 6.3 3.3 4.7 1.6 versicolor
58 4.9 2.4 3.3 1.0 versicolor
59 6.6 2.9 4.6 1.3 versicolor
60 5.2 2.7 3.9 1.4 versicolor
61 5.0 2.0 3.5 1.0 versicolor
62 5.9 3.0 4.2 1.5 versicolor
63 6.0 2.2 4.0 1.0 versicolor
64 6.1 2.9 4.7 1.4 versicolor
65 5.6 2.9 3.6 1.3 versicolor
66 6.7 3.1 4.4 1.4 versicolor
67 5.6 3.0 4.5 1.5 versicolor
68 5.8 2.7 4.1 1.0 versicolor
69 6.2 2.2 4.5 1.5 versicolor
70 5.6 2.5 3.9 1.1 versicolor
71 5.9 3.2 4.8 1.8 versicolor
72 6.1 2.8 4.0 1.3 versicolor
73 6.3 2.5 4.9 1.5 versicolor
74 6.1 2.8 4.7 1.2 versicolor
75 6.4 2.9 4.3 1.3 versicolor
76 6.6 3.0 4.4 1.4 versicolor
77 6.8 2.8 4.8 1.4 versicolor
78 6.7 3.0 5.0 1.7 versicolor
79 6.0 2.9 4.5 1.5 versicolor
80 5.7 2.6 3.5 1.0 versicolor
81 5.5 2.4 3.8 1.1 versicolor
82 5.5 2.4 3.7 1.0 versicolor
83 5.8 2.7 3.9 1.2 versicolor
84 6.0 2.7 5.1 1.6 versicolor
85 5.4 3.0 4.5 1.5 versicolor
86 6.0 3.4 4.5 1.6 versicolor
87 6.7 3.1 4.7 1.5 versicolor
88 6.3 2.3 4.4 1.3 versicolor
89 5.6 3.0 4.1 1.3 versicolor
90 5.5 2.5 4.0 1.3 versicolor
91 5.5 2.6 4.4 1.2 versicolor
92 6.1 3.0 4.6 1.4 versicolor
93 5.8 2.6 4.0 1.2 versicolor
94 5.0 2.3 3.3 1.0 versicolor
95 5.6 2.7 4.2 1.3 versicolor
96 5.7 3.0 4.2 1.2 versicolor
97 5.7 2.9 4.2 1.3 versicolor
98 6.2 2.9 4.3 1.3 versicolor
99 5.1 2.5 3.0 1.1 versicolor
100 5.7 2.8 4.1 1.3 versicolor
101 6.3 3.3 6.0 2.5 virginica
102 5.8 2.7 5.1 1.9 virginica
103 7.1 3.0 5.9 2.1 virginica
104 6.3 2.9 5.6 1.8 virginica
105 6.5 3.0 5.8 2.2 virginica
106 7.6 3.0 6.6 2.1 virginica
107 4.9 2.5 4.5 1.7 virginica
108 7.3 2.9 6.3 1.8 virginica
109 6.7 2.5 5.8 1.8 virginica
110 7.2 3.6 6.1 2.5 virginica
111 6.5 3.2 5.1 2.0 virginica
112 6.4 2.7 5.3 1.9 virginica
113 6.8 3.0 5.5 2.1 virginica
114 5.7 2.5 5.0 2.0 virginica
115 5.8 2.8 5.1 2.4 virginica
116 6.4 3.2 5.3 2.3 virginica
117 6.5 3.0 5.5 1.8 virginica
118 7.7 3.8 6.7 2.2 virginica
119 7.7 2.6 6.9 2.3 virginica
120 6.0 2.2 5.0 1.5 virginica
121 6.9 3.2 5.7 2.3 virginica
122 5.6 2.8 4.9 2.0 virginica
123 7.7 2.8 6.7 2.0 virginica
124 6.3 2.7 4.9 1.8 virginica
125 6.7 3.3 5.7 2.1 virginica
126 7.2 3.2 6.0 1.8 virginica
127 6.2 2.8 4.8 1.8 virginica
128 6.1 3.0 4.9 1.8 virginica
129 6.4 2.8 5.6 2.1 virginica
130 7.2 3.0 5.8 1.6 virginica
131 7.4 2.8 6.1 1.9 virginica
132 7.9 3.8 6.4 2.0 virginica
133 6.4 2.8 5.6 2.2 virginica
134 6.3 2.8 5.1 1.5 virginica
135 6.1 2.6 5.6 1.4 virginica
136 7.7 3.0 6.1 2.3 virginica
137 6.3 3.4 5.6 2.4 virginica
138 6.4 3.1 5.5 1.8 virginica
139 6.0 3.0 4.8 1.8 virginica
140 6.9 3.1 5.4 2.1 virginica
141 6.7 3.1 5.6 2.4 virginica
142 6.9 3.1 5.1 2.3 virginica
143 5.8 2.7 5.1 1.9 virginica
144 6.8 3.2 5.9 2.3 virginica
145 6.7 3.3 5.7 2.5 virginica
146 6.7 3.0 5.2 2.3 virginica
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica
94

Extract elements using names

str(first_list_with_names)
List of 3
$ a: int [1:3] 1 2 3
$ b: int [1:2, 1:3] 1 2 3 4 5 6
$ c:'data.frame': 150 obs. of 5 variables:
..$ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
..$ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
..$ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
..$ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
95

Extract elements using names

str(first_list_with_names)
List of 3
$ a: int [1:3] 1 2 3
$ b: int [1:2, 1:3] 1 2 3 4 5 6
$ c:'data.frame': 150 obs. of 5 variables:
..$ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
..$ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
..$ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
..$ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
first_list_with_names$a
[1] 1 2 3
96
first_list_with_names$c$Species
[1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
[13] setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa
[25] setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa
[49] setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor
[61] versicolor versicolor versicolor versicolor versicolor versicolor
[67] versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor
[79] versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor
[97] versicolor versicolor versicolor versicolor virginica virginica
[103] virginica virginica virginica virginica virginica virginica
[109] virginica virginica virginica virginica virginica virginica
[115] virginica virginica virginica virginica virginica virginica
[121] virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica
[133] virginica virginica virginica virginica virginica virginica
[139] virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
97

Your turn

98
c("Jan","Feb","Mar"); matrix(c(3,9,5,1,-2,8), nrow = 2); list("green",12.3)
[1] "Jan" "Feb" "Mar"
[,1] [,2] [,3]
[1,] 3 5 -2
[2,] 9 1 8
[[1]]
[1] "green"
[[2]]
[1] 12.3
  1. Create a list containing the above vector, matrix and the list.

  2. Name the elements as first, second and third.

99

Thank you!

Slides available at: hellor.netlify.app

All rights reserved by Thiyanga S. Talagala

100

Today's menu

  • Vector

  • Matrix

  • Array

  • Data Frame

  • List

2
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow