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:

```
1 m <- matrix(1:12, 3, 4) #Create a 3x4 matrix filled with numbers 1 to 12
2 m #Display it!
3 m*2 #Arithmetic, just like with vectors
4 m[2,3] #Pick out a single element (2nd row, 3rd column)
5 m[1:2, 2:4] #Or a range (rows 1 and 2, columns 2, 3, and 4.)
6 m[,1] #If the row index is missing, assume all rows
7 m[1,] #Same for columns
8 m[,2] <- 99 #You can assign values to one or more elements
9 m #See!
10 ###Some real data, stored as "arrays"
11 HairEyeColor #A 3D array
12 HairEyeColor[,,1] #Select only the males to make it a 2D matrix
13 Titanic #A 4D array
14 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