Creating matrics in R

The matrix(a, nrow = b, ncol = c) command in R creates a matrix that repeats the element a in a matrix with b rows and c columns.

A matrix can be manually created by using the c() command as well.


# Create a matrix of all 1's and all 2's that are 2 by 3 and 3 by 2, respectively
A <- matrix(1, nrow = 2, ncol = 3)

print(matrix(2, nrow = 3, ncol = 2))

# Create a matrix B and changing the by row designation.
B <- matrix(c(1, 2, 3, 2), nrow = 2, ncol = 2, byrow = FALSE)
C <- matrix(c(1, 2, 3, 2), nrow = 2, ncol = 2, byrow = TRUE)

# Add A to the previously-created matrix B
A + B

Matrix Multiplication as a Transformation

Matrices can be viewed as a way to transform collections of vectors into other vectors.

These transformations can take many forms, but the simplest ones in two dimensions are stretches or shrinkages (in either coordinate), reflections (e.g. about the x-axis, y-axis, origin, the line y = x), and rotations (clockwise, counter-clockwise).

Multiplication of a vector by a matrix is accomplished using the %*% command.

A%*%b
     [,1]
[1,]    4
[2,]    1
#Show that multiplication by the matrix B with R output:

B.B <- c(1,0,0,2/3)
B <- matrix(B.B,nrow=2,ncol=2)
b <- c(1,1)
B%*%b
#shrinks the y (second) component of the vector b <- c(1,1) by 33 percent.
#a reflection matrix to the vector 

A <- matrix(c(-1,0,0,1),nrow=2,ncol=2)
b <- c(2, 1)
A%*%b

B <- matrix(c(1,0,0,-1),nrow=2,ncol=2)
B%*%b

C <- matrix(c(-4,0,0,-2),nrow=2,ncol=2)
C%*%b
A = matrix(c(1, 3, 2, -1, 0, 1), nrow = 2, ncol = 3)
B = matrix(c(-1, 1, 2, -3), nrow = 2, ncol = 2)
A
B
B%*%A

Matrix Multiplication - Order Matters

Matrices act on vectors (stretches, shrinkages, reflections, rotations) and transform vectors into new vectors.

The successive application of these matrices can act as complex transformations, but because matrix multiplication is not commutative, the order of these transformations matter.

A <- matrix(c(0.7071068, -0.7071068,0.7071068,0.7071068),nrow=2,ncol=2)

B <- matrix(c(1,0,0,-1),nrow=2,ncol=2)

b <- c(1,1)

# Multiply A by B
A%*%B

# Multiply A on the right of B
B%*%A

# Multiply the product of A and B by the vector b
A%*%B%*%b

# Multiply A on the right of B, and then by the vector b
B%*%A%*%b

Intro to The Matrix Inverse

For any number a (aside from 0), there’s always a number 1/a that can be used to “undo” multiplication by a.

For matrices, this is not always true. However, when it is, we call the matrix that, when applied to A, yields the identity matrix I, that matrix’s inverse.

The solve() function in R will find the inverse of a matrix if it exists and provide an error if it does not.

# Multiply A by its inverse
A%*%Ainv
     [,1] [,2]
[1,]    1    0
[2,]    0    1
LS0tDQp0aXRsZTogIkNyZWF0aW5nIG1hdHJpY3MgaW4gUiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBDcmVhdGluZyBtYXRyaWNzIGluIFINClRoZSBtYXRyaXgoYSwgbnJvdyA9IGIsIG5jb2wgPSBjKSBjb21tYW5kIGluIFIgY3JlYXRlcyBhIG1hdHJpeCB0aGF0IHJlcGVhdHMgdGhlIGVsZW1lbnQgYSBpbiBhIG1hdHJpeCB3aXRoIGIgcm93cyBhbmQgYyBjb2x1bW5zLg0KDQpBIG1hdHJpeCBjYW4gYmUgbWFudWFsbHkgY3JlYXRlZCBieSB1c2luZyB0aGUgYygpIGNvbW1hbmQgYXMgd2VsbC4NCg0KYGBge3J9DQoNCiMgQ3JlYXRlIGEgbWF0cml4IG9mIGFsbCAxJ3MgYW5kIGFsbCAyJ3MgdGhhdCBhcmUgMiBieSAzIGFuZCAzIGJ5IDIsIHJlc3BlY3RpdmVseQ0KQSA8LSBtYXRyaXgoMSwgbnJvdyA9IDIsIG5jb2wgPSAzKQ0KDQpwcmludChtYXRyaXgoMiwgbnJvdyA9IDMsIG5jb2wgPSAyKSkNCg0KIyBDcmVhdGUgYSBtYXRyaXggQiBhbmQgY2hhbmdpbmcgdGhlIGJ5IHJvdyBkZXNpZ25hdGlvbi4NCkIgPC0gbWF0cml4KGMoMSwgMiwgMywgMiksIG5yb3cgPSAyLCBuY29sID0gMiwgYnlyb3cgPSBGQUxTRSkNCkMgPC0gbWF0cml4KGMoMSwgMiwgMywgMiksIG5yb3cgPSAyLCBuY29sID0gMiwgYnlyb3cgPSBUUlVFKQ0KDQojIEFkZCBBIHRvIHRoZSBwcmV2aW91c2x5LWNyZWF0ZWQgbWF0cml4IEINCkEgKyBCDQoNCmBgYA0KDQojIyMgTWF0cml4IE11bHRpcGxpY2F0aW9uIGFzIGEgVHJhbnNmb3JtYXRpb24NCg0KTWF0cmljZXMgY2FuIGJlIHZpZXdlZCBhcyBhIHdheSB0byB0cmFuc2Zvcm0gY29sbGVjdGlvbnMgb2YgdmVjdG9ycyBpbnRvIG90aGVyIHZlY3RvcnMuDQoNClRoZXNlIHRyYW5zZm9ybWF0aW9ucyBjYW4gdGFrZSBtYW55IGZvcm1zLCBidXQgdGhlIHNpbXBsZXN0IG9uZXMgaW4gdHdvIGRpbWVuc2lvbnMgYXJlIHN0cmV0Y2hlcyBvciBzaHJpbmthZ2VzIChpbiBlaXRoZXIgY29vcmRpbmF0ZSksIHJlZmxlY3Rpb25zIChlLmcuIGFib3V0IHRoZSB4LWF4aXMsIHktYXhpcywgb3JpZ2luLCB0aGUgbGluZSB5ID0geCksIGFuZCByb3RhdGlvbnMgKGNsb2Nrd2lzZSwgY291bnRlci1jbG9ja3dpc2UpLg0KDQpNdWx0aXBsaWNhdGlvbiBvZiBhIHZlY3RvciBieSBhIG1hdHJpeCBpcyBhY2NvbXBsaXNoZWQgdXNpbmcgdGhlICUqJSBjb21tYW5kLg0KDQpgYGB7cn0NCiMgVXNlIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBpbiBSIHRvIHNob3cgdGhhdCBtdWx0aXBsaWNhdGlvbiBieSB0aGUgbWF0cml4IEEgd2l0aCBSIG91dHB1dDoNCkEuQSA8LSBjKDQsMCwwLDEpDQpBIDwtIG1hdHJpeChBLkEsbnJvdz0yLG5jb2w9MikNCmIgPC0gYygxLDEpDQoNCkElKiViDQoNCiMgQSBzdHJldGNoZXMgdGhlIHggKGZpcnN0KSBjb21wb25lbnQgb2YgdGhlIHZlY3RvciBiIDwtIGMoMSwxKSBieSBhIGZhY3RvciBvZiBmb3VyLg0KYGBgDQoNCmBgYHtyfQ0KI1Nob3cgdGhhdCBtdWx0aXBsaWNhdGlvbiBieSB0aGUgbWF0cml4IEIgd2l0aCBSIG91dHB1dDoNCg0KQi5CIDwtIGMoMSwwLDAsMi8zKQ0KQiA8LSBtYXRyaXgoQi5CLG5yb3c9MixuY29sPTIpDQpiIDwtIGMoMSwxKQ0KQiUqJWINCiNzaHJpbmtzIHRoZSB5IChzZWNvbmQpIGNvbXBvbmVudCBvZiB0aGUgdmVjdG9yIGIgPC0gYygxLDEpIGJ5IDMzIHBlcmNlbnQuDQpgYGANCg0KDQpgYGB7cn0NCiNhIHJlZmxlY3Rpb24gbWF0cml4IHRvIHRoZSB2ZWN0b3IgDQoNCkEgPC0gbWF0cml4KGMoLTEsMCwwLDEpLG5yb3c9MixuY29sPTIpDQpiIDwtIGMoMiwgMSkNCkElKiViDQoNCkIgPC0gbWF0cml4KGMoMSwwLDAsLTEpLG5yb3c9MixuY29sPTIpDQpCJSolYg0KDQpDIDwtIG1hdHJpeChjKC00LDAsMCwtMiksbnJvdz0yLG5jb2w9MikNCkMlKiViDQpgYGANCg0KYGBge3J9DQpBID0gbWF0cml4KGMoMSwgMywgMiwgLTEsIDAsIDEpLCBucm93ID0gMiwgbmNvbCA9IDMpDQpCID0gbWF0cml4KGMoLTEsIDEsIDIsIC0zKSwgbnJvdyA9IDIsIG5jb2wgPSAyKQ0KQQ0KQg0KQiUqJUENCmBgYA0KDQojIyMgTWF0cml4IE11bHRpcGxpY2F0aW9uIC0gT3JkZXIgTWF0dGVycw0KDQpNYXRyaWNlcyBhY3Qgb24gdmVjdG9ycyAoc3RyZXRjaGVzLCBzaHJpbmthZ2VzLCByZWZsZWN0aW9ucywgcm90YXRpb25zKSBhbmQgdHJhbnNmb3JtIHZlY3RvcnMgaW50byBuZXcgdmVjdG9ycy4NCg0KVGhlIHN1Y2Nlc3NpdmUgYXBwbGljYXRpb24gb2YgdGhlc2UgbWF0cmljZXMgY2FuIGFjdCBhcyBjb21wbGV4IHRyYW5zZm9ybWF0aW9ucywgYnV0IGJlY2F1c2UgbWF0cml4IG11bHRpcGxpY2F0aW9uIGlzIG5vdCBjb21tdXRhdGl2ZSwgdGhlIG9yZGVyIG9mIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyBtYXR0ZXIuDQoNCmBgYHtyfQ0KQSA8LSBtYXRyaXgoYygwLjcwNzEwNjgsIC0wLjcwNzEwNjgsMC43MDcxMDY4LDAuNzA3MTA2OCksbnJvdz0yLG5jb2w9MikNCg0KQiA8LSBtYXRyaXgoYygxLDAsMCwtMSksbnJvdz0yLG5jb2w9MikNCg0KYiA8LSBjKDEsMSkNCg0KIyBNdWx0aXBseSBBIGJ5IEINCkElKiVCDQoNCiMgTXVsdGlwbHkgQSBvbiB0aGUgcmlnaHQgb2YgQg0KQiUqJUENCg0KIyBNdWx0aXBseSB0aGUgcHJvZHVjdCBvZiBBIGFuZCBCIGJ5IHRoZSB2ZWN0b3IgYg0KQSUqJUIlKiViDQoNCiMgTXVsdGlwbHkgQSBvbiB0aGUgcmlnaHQgb2YgQiwgYW5kIHRoZW4gYnkgdGhlIHZlY3RvciBiDQpCJSolQSUqJWINCg0KYGBgDQoNCiMjIyBJbnRybyB0byBUaGUgTWF0cml4IEludmVyc2UNCg0KRm9yIGFueSBudW1iZXIgYSAoYXNpZGUgZnJvbSAwKSwgdGhlcmUncyBhbHdheXMgYSBudW1iZXIgMS9hIHRoYXQgY2FuIGJlIHVzZWQgdG8gInVuZG8iIG11bHRpcGxpY2F0aW9uIGJ5IGEuDQoNCkZvciBtYXRyaWNlcywgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUuIEhvd2V2ZXIsIHdoZW4gaXQgaXMsIHdlIGNhbGwgdGhlIG1hdHJpeCB0aGF0LCB3aGVuIGFwcGxpZWQgdG8gQSwgeWllbGRzIHRoZSBpZGVudGl0eSBtYXRyaXggSSwgdGhhdCBtYXRyaXgncyBpbnZlcnNlLg0KDQpUaGUgc29sdmUoKSBmdW5jdGlvbiBpbiBSIHdpbGwgZmluZCB0aGUgaW52ZXJzZSBvZiBhIG1hdHJpeCBpZiBpdCBleGlzdHMgYW5kIHByb3ZpZGUgYW4gZXJyb3IgaWYgaXQgZG9lcyBub3QuDQoNCmBgYHtyfQ0KIyBJZGVudGl0eSBtYXRyaXggDQpkaWFnKDIpICMgaWRlbnRpdHkgbWF0cml4IDIgeDINCmRpYWcoMykgIyBpZGVudGl0eSBtYXRyaXggM3gzDQoNCiMgVGFrZSB0aGUgaW52ZXJzZSBvZiB0aGUgMiBieSAyIGlkZW50aXR5IG1hdHJpeA0Kc29sdmUoZGlhZygyKSkNCg0KIyBUYWtlIHRoZSBpbnZlcnNlIG9mIHRoZSBtYXRyaXggQQ0KQWludiA8LSBzb2x2ZShBKQ0KDQojIE11bHRpcGx5IEEgaW52ZXJzZSBieSBBDQpBaW52JSolQQ0KDQojIE11bHRpcGx5IEEgYnkgaXRzIGludmVyc2UNCkElKiVBaW52DQpgYGANCg0K