R can do all kinds of matrix calculations, like multiplication, tranposing and calculating the inverse. The following manual was created by Phil Ender.

Note: R wants the data to be entered by columns starting with column one.

#### The Matrix

**# the matrix function
# 1st arg: c(2,3,-2,1,2,2) the values of the elements filling the columns
# 2nd arg: 3 the number of rows
# 3rd arg: 2 the number of columns
> A <- matrix(c(2,3,-2,1,2,2),3,2)
> A**
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2

#### Is Something a Matrix

**> is.matrix(A)**
[1] TRUE
**> is.vector(A)**
[1] FALSE

#### Multiplication by a Scalar

**> c <- 3
> c*A**
[,1] [,2]
[1,] 6 3
[2,] 9 6
[3,] -6 6

#### Matrix Addition & Subtraction

**> B <- matrix(c(1,4,-2,1,2,1),3,2)
> B**
[,1] [,2]
[1,] 1 1
[2,] 4 2
[3,] -2 1
**> C <- A + B
> C**
[,1] [,2]
[1,] 3 2
[2,] 7 4
[3,] -4 3
**> D <- A - B
> D**
[,1] [,2]
[1,] 1 0
[2,] -1 0
[3,] 0 1

#### Matrix Multiplication

**> D <- matrix(c(2,-2,1,2,3,1),2,3)
> D**
[,1] [,2] [,3]
[1,] 2 1 3
[2,] -2 2 1
**> C <- D %*% A
> C**
[,1] [,2]
[1,] 1 10
[2,] 0 4
**> C <- A %*% D
> C**
[,1] [,2] [,3]
[1,] 2 4 7
[2,] 2 7 11
[3,] -8 2 -4
**> D <- matrix(c(2,1,3),1,3)
> D**
[,1] [,2] [,3]
[1,] 2 1 3
**> C <- D %*% A
> C**
[,1] [,2]
[1,] 1 10
**> C <- A %*% D**
Error in A %*% D : non-conformable arguments

#### Transpose of a Matrix

**> AT <- t(A)
> AT**
[,1] [,2] [,3]
[1,] 2 3 -2
[2,] 1 2 2
**> ATT <- t(AT)
>ATT**
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2

## Common Vectors

## Unit Vector

**> U <- matrix(1,3,1)
> U**
[,1]
[1,] 1
[2,] 1
[3,] 1

## Common Matrices

## Unit Matrix

**Using Stata**

**> U <- matrix(1,3,2)
> U**
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 1 1

## Diagonal Matrix

**> S <- matrix(c(2,3,-2,1,2,2,4,2,3),3,3)
> S**
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 3 2 2
[3,] -2 2 3
**> D <- diag(S)
> D**
[1] 2 2 3
**> D <- diag(diag(S))
> D**
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 0 2 0
[3,] 0 0 3

## Identity Matrix

**> I <- diag(c(1,1,1))
> I**
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1

## Symmetric Matrix

**> C <- matrix(c(2,1,5,1,3,4,5,4,-2),3,3)
> C**
[,1] [,2] [,3]
[1,] 2 1 5
[2,] 1 3 4
[3,] 5 4 -2
**> CT <- t(C)
> CT**
[,1] [,2] [,3]
[1,] 2 1 5
[2,] 1 3 4
[3,] 5 4 -2

#### Inverse of a Matrix

**> A <- matrix(c(4,4,-2,2,6,2,2,8,4),3,3)
> A**
[,1] [,2] [,3]
[1,] 4 2 2
[2,] 4 6 8
[3,] -2 2 4
**> # using MASS package
> library(MASS)
> AI <- ginv(A)
> AI**
[,1] [,2] [,3]
[1,] 1.0 -0.5 0.5
[2,] -4.0 2.5 -3.0
[3,] 2.5 -1.5 2.0
**> # using car package
> library(car)
> AI <- inv(A)
> AI**
[,1] [,2] [,3]
[1,] 1.0 -0.5 0.5
[2,] -4.0 2.5 -3.0
[3,] 2.5 -1.5 2.0
**> A %*% AI**
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
**> AI %*% A**
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1

#### Inverse & Determinant of a Matrix

**> C <- matrix(c(2,1,6,1,3,4,6,4,-2),3,3)
> C**
[,1] [,2] [,3]
[1,] 2 1 6
[2,] 1 3 4
[3,] 6 4 -2
**> CI <- inv(C)
CI**
[,1] [,2] [,3]
[1,] 0.2156863 -0.25490196 0.13725490
[2,] -0.2549020 0.39215686 0.01960784
[3,] 0.1372549 0.01960784 -0.04901961
**> d <- det(C)
> d**
[1] -102

#### Number of Rows & Columns

**> X <- matrix(c(3,2,4,3,2,-2,6,1),4,2)
> X**
[,1] [,2]
[1,] 3 2
[2,] 2 -2
[3,] 4 6
[4,] 3 1
**> dim(X)**
[1] 4 2
**> r <- nrow(X)
> r**
[1] 4
**> c <- ncol(X)
> c**
[1] 2

#### Computing Column & Row Sums

**# note the uppercase S
> A <- matrix(c(2,3,-2,1,2,2),3,2)
> A**
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
**> c <- colSums(A)
> c**
[1] 3 5
**> r <- rowSums(A)
> r**
[1] 3 5 0
**> a <- sum(A)
> a**
[1] 8

#### Computing Column & Row Means

**# note the uppercase M
> cm <- colMeans(A)
> cm**
[1] 1.000000 1.666667
**> rm <- rowMeans(A)
> rm**
[1] 1.5 2.5 0.0
**> m <- mean(A)
> m**
[1] 1.333333

#### Horizontal Concatenation

**> A
> A**
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
**> B <- matrix(c(1,3,2,1,4,2),3,2)
> B**
[,1] [,2]
[1,] 1 1
[2,] 3 4
[3,] 2 2
**> C <- cbind(A,B)
> C**
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 3 2 3 4
[3,] -2 2 2 2

#### Vertical Concatenation (Appending)

**> C <- rbind(A,B)
> C**
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
[4,] 1 1
[5,] 3 4
[6,] 2 2