Statistical Analysis: an Introduction using R/R/Matrices
Essentially, a matrix (plural: matrices) is the two dimensional equivalent of a vector. In other words, it is a rectangular grid of numbers, arranged in rows and columns. In R, a matrix object can be created by the matrix() function, which takes, as a first argument, a vector of numbers with which the matrix is filled, and as the second and third arguments, the number of rows and the number of columns respectively.
R can also use array objects, which are like matrices, but can have more than 2 dimensions. These are particularly useful for tables: a type of array containing counts of data classified according to various criteria. Examples of these "contingency tables" are the HairEyeColor and Titanic tables shown below.
As with vectors, the indexing operator [] can be used to access individual elements or sets of elements in a matrix or array. This is done by separating the numbers inside the brackets by commas. For example, for matrices, you need to specify the row index then a comma, then the column index. If the row index is blank, it is assumed that you want all the rows, and similarly for the columns.
Input:
-
m <- matrix(1:12, 3, 4) #Create a 3x4 matrix filled with numbers 1 to 12
-
m #Display it!
-
m*2 #Arithmetic, just like with vectors
-
m[2,3] #Pick out a single element (2nd row, 3rd column)
-
m[1:2, 2:4] #Or a range (rows 1 and 2, columns 2, 3, and 4.)
-
m[,1] #If the row index is missing, assume all rows
-
m[1,] #Same for columns
-
m[,2] <- 99 #You can assign values to one or more elements
-
m #See!
-
###Some real data, stored as "arrays"
-
HairEyeColor #A 3D array
-
HairEyeColor[,,1] #Select only the males to make it a 2D matrix
-
Titanic #A 4D array
-
Titanic[1:3,"Male","Adult",] #A matrix of only the adult male passengers
Result:
> m <- matrix(1:12, 3, 4) #Create a 3x4 matrix filled with numbers 1 to 12
> m #Display it!
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > m*2 #Arithmetic, just like with vectors
[,1] [,2] [,3] [,4]
[1,] 2 8 14 20 [2,] 4 10 16 22 [3,] 6 12 18 24 > m[2,3] #Pick out a single element (2nd row, 3rd column) [1] 8 > m[1:2, 2:4] #Or a range (rows 1 and 2, columns 2, 3, and 4.)
[,1] [,2] [,3]
[1,] 4 7 10 [2,] 5 8 11 > m[,1] #If the row index is missing, assume all rows [1] 1 2 3 > m[1,] #Same for columns [1] 1 4 7 10 > m[,2] <- 99 #You can assign values to one or more elements > m #See!
[,1] [,2] [,3] [,4]
[1,] 1 99 7 10 [2,] 2 99 8 11 [3,] 3 99 9 12 > ###Some real data, stored as "arrays" > HairEyeColor #A 3D array , , Sex = Male
Eye
Hair Brown Blue Hazel Green
Black 32 11 10 3 Brown 53 50 25 15 Red 10 10 7 7 Blond 3 30 5 8
, , Sex = Female
Eye
Hair Brown Blue Hazel Green
Black 36 9 5 2 Brown 66 34 29 14 Red 16 7 7 7 Blond 4 64 5 8
> HairEyeColor[,,1] #Select only the males to make it a 2D matrix
Eye
Hair Brown Blue Hazel Green
Black 32 11 10 3 Brown 53 50 25 15 Red 10 10 7 7 Blond 3 30 5 8
> Titanic #A 4D array , , Age = Child, Survived = No
Sex
Class Male Female
1st 0 0 2nd 0 0 3rd 35 17 Crew 0 0
, , Age = Adult, Survived = No
Sex
Class Male Female
1st 118 4 2nd 154 13 3rd 387 89 Crew 670 3
, , Age = Child, Survived = Yes
Sex
Class Male Female
1st 5 1 2nd 11 13 3rd 13 14 Crew 0 0
, , Age = Adult, Survived = Yes
Sex
Class Male Female
1st 57 140 2nd 14 80 3rd 75 76 Crew 192 20
> Titanic[1:3,"Male","Adult",] #A matrix of only the adult male passengers
Survived
Class No Yes
1st 118 57 2nd 154 14
3rd 387 75