A list is a generic vector containing other objects.

For example, the following variable x is a list containing copies of three vectors n, s, b, and a numeric value 3.

n = c(2, 3, 5) 
s = c("aa", "bb", "cc", "dd", "ee") 
b = c(TRUE, FALSE, TRUE, FALSE, FALSE) 
x = list(n, s, b, 3)   # x contains copies of n, s, b

List Slicing We retrieve a list slice with the single square bracket “[]” operator. The following is a slice containing the second member of x, which is a copy of s.

x[3]

With an index vector, we can retrieve a slice with multiple members. Here a slice containing the second and fourth members of x

x[c(2, 4)] 

Member Reference In order to reference a list member directly, we have to use the double square bracket “[[]]” operator. The following object x[[2]] is the second member of x. In other words, x[[2]] is a copy of s, but is not a slice containing s or its copy.

x[[2]]

We can modify its content directly.

 x[[2]][1] = "ta" 
 x[[2]] 
 

Named List Members

We can assign names to list members, and reference them by names instead of numeric indexes.

For example, in the following, v is a list of two members, named “bob” and “john”.

v = list(bob=c(2, 3, 5), john=c("aa", "bb"))
v

List Slicing We retrieve a list slice with the single square bracket “[]” operator. Here is a list slice containing a member of v named “bob”.

 v["bob"] 

With an index vector, we can retrieve a slice with multiple members. Here is a list slice with both members of v. Notice how they are reversed from their original positions in v.

v[c("john", "bob")] 

Member Reference In order to reference a list member directly, we have to use the double square bracket “[[]]” operator. The following references a member of v by name.

 v[["bob"]] 

A named list member can also be referenced directly with the “$” operator in lieu of the double square bracket operator.

v$bob 

Matrix

A matrix is a collection of data elements arranged in a two-dimensional rectangular layout. The data elements must be of the same basic type

A = matrix(c(2, 4, 3, 1, 5, 7), # the data elements 
           nrow=2,              # number of rows 
           ncol=3,              # number of columns
           byrow = TRUE)        # fill matrix by rows 
 
A                      # print the matrix 

An element at the mth row, nth column of A can be accessed by the expression A[m, n].

A[2, 3]      # element at 2nd row, 3rd column 

The entire mth row A can be extracted as A[m, ].

A[2, ] # 2nd row

Similarly, the entire nth column A can be extracted as A[ ,n].

A[ ,3]       # the 3rd column 

We can also extract more than one rows or columns at a time.


A[ ,c(1,3)]  # the 1st and 3rd columns 

Matrix Construction

There are various ways to construct a matrix. When we construct a matrix directly with data elements, the matrix content is filled along the column orientation by default. For example, in the following code snippet, the content of B is filled along the columns consecutively.


B = matrix(c(2, 4, 3, 1, 5, 7), 
           nrow=3, 
           ncol=2) 
 
B             # B has 3 rows and 2 columns 

Transpose We construct the transpose of a matrix by interchanging its columns and rows with the function t .

t(B)          # transpose of B 

Combining Matrices The columns of two matrices having the same number of rows can be combined into a larger matrix. For example, suppose we have another matrix C also with 3 rows.


C = matrix(c(7, 4, 2),nrow=3,ncol=1) 
 
C             # C has 3 rows 

Then we can combine the columns of B and C with cbind.

cbind(B, C) 

Similarly, we can combine the rows of two matrices if they have the same number of columns with the rbind function.

D = matrix(c(6, 2),nrow=1,ncol=2) 
 
D             # D has 2 columns 

rbind(B, D) 
LS0tCnRpdGxlOiAiRGF0YSBTdHJ1Y3R1cmU6IExpc3QgJiBNYXRyaXgiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkEgbGlzdCBpcyBhIGdlbmVyaWMgdmVjdG9yIGNvbnRhaW5pbmcgb3RoZXIgb2JqZWN0cy4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHggaXMgYSBsaXN0IGNvbnRhaW5pbmcgY29waWVzIG9mIHRocmVlIHZlY3RvcnMgbiwgcywgYiwgYW5kIGEgbnVtZXJpYyB2YWx1ZSAzLgoKCgpgYGB7cn0KbiA9IGMoMiwgMywgNSkgCnMgPSBjKCJhYSIsICJiYiIsICJjYyIsICJkZCIsICJlZSIpIApiID0gYyhUUlVFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIEZBTFNFKSAKeCA9IGxpc3QobiwgcywgYiwgMykgICAjIHggY29udGFpbnMgY29waWVzIG9mIG4sIHMsIGIKCmBgYAoKTGlzdCBTbGljaW5nCldlIHJldHJpZXZlIGEgbGlzdCBzbGljZSB3aXRoIHRoZSBzaW5nbGUgc3F1YXJlIGJyYWNrZXQgIltdIiBvcGVyYXRvci4gVGhlIGZvbGxvd2luZyBpcyBhIHNsaWNlIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBtZW1iZXIgb2YgeCwgd2hpY2ggaXMgYSBjb3B5IG9mIHMuCgpgYGB7cn0KeFszXQoKYGBgCgoKV2l0aCBhbiBpbmRleCB2ZWN0b3IsIHdlIGNhbiByZXRyaWV2ZSBhIHNsaWNlIHdpdGggbXVsdGlwbGUgbWVtYmVycy4gSGVyZSBhIHNsaWNlIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBhbmQgZm91cnRoIG1lbWJlcnMgb2YgeAoKYGBge3J9CnhbYygyLCA0KV0gCgpgYGAKCk1lbWJlciBSZWZlcmVuY2UKSW4gb3JkZXIgdG8gcmVmZXJlbmNlIGEgbGlzdCBtZW1iZXIgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBkb3VibGUgc3F1YXJlIGJyYWNrZXQgIltbXV0iIG9wZXJhdG9yLiBUaGUgZm9sbG93aW5nIG9iamVjdCB4W1syXV0gaXMgdGhlIHNlY29uZCBtZW1iZXIgb2YgeC4gSW4gb3RoZXIgd29yZHMsIHhbWzJdXSBpcyBhIGNvcHkgb2YgcywgYnV0IGlzIG5vdCBhIHNsaWNlIGNvbnRhaW5pbmcgcyBvciBpdHMgY29weS4KCmBgYHtyfQp4W1syXV0KCmBgYAoKV2UgY2FuIG1vZGlmeSBpdHMgY29udGVudCBkaXJlY3RseS4KCgpgYGB7cn0KIHhbWzJdXVsxXSA9ICJ0YSIgCiB4W1syXV0gCiAKYGBgCgpOYW1lZCBMaXN0IE1lbWJlcnMKCldlIGNhbiBhc3NpZ24gbmFtZXMgdG8gbGlzdCBtZW1iZXJzLCBhbmQgcmVmZXJlbmNlIHRoZW0gYnkgbmFtZXMgaW5zdGVhZCBvZiBudW1lcmljIGluZGV4ZXMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGZvbGxvd2luZywgdiBpcyBhIGxpc3Qgb2YgdHdvIG1lbWJlcnMsIG5hbWVkICJib2IiIGFuZCAiam9obiIuCgpgYGB7cn0KdiA9IGxpc3QoYm9iPWMoMiwgMywgNSksIGpvaG49YygiYWEiLCAiYmIiKSkKdgoKYGBgCgpMaXN0IFNsaWNpbmcKV2UgcmV0cmlldmUgYSBsaXN0IHNsaWNlIHdpdGggdGhlIHNpbmdsZSBzcXVhcmUgYnJhY2tldCAiW10iIG9wZXJhdG9yLiBIZXJlIGlzIGEgbGlzdCBzbGljZSBjb250YWluaW5nIGEgbWVtYmVyIG9mIHYgbmFtZWQgImJvYiIuCgpgYGB7cn0KIHZbImJvYiJdIApgYGAKV2l0aCBhbiBpbmRleCB2ZWN0b3IsIHdlIGNhbiByZXRyaWV2ZSBhIHNsaWNlIHdpdGggbXVsdGlwbGUgbWVtYmVycy4gSGVyZSBpcyBhIGxpc3Qgc2xpY2Ugd2l0aCBib3RoIG1lbWJlcnMgb2Ygdi4gTm90aWNlIGhvdyB0aGV5IGFyZSByZXZlcnNlZCBmcm9tIHRoZWlyIG9yaWdpbmFsIHBvc2l0aW9ucyBpbiB2LgoKYGBge3J9CnZbYygiam9obiIsICJib2IiKV0gCgpgYGAKCk1lbWJlciBSZWZlcmVuY2UKSW4gb3JkZXIgdG8gcmVmZXJlbmNlIGEgbGlzdCBtZW1iZXIgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBkb3VibGUgc3F1YXJlIGJyYWNrZXQgIltbXV0iIG9wZXJhdG9yLiBUaGUgZm9sbG93aW5nIHJlZmVyZW5jZXMgYSBtZW1iZXIgb2YgdiBieSBuYW1lLgoKYGBge3J9CiB2W1siYm9iIl1dIAoKYGBgCgpBIG5hbWVkIGxpc3QgbWVtYmVyIGNhbiBhbHNvIGJlIHJlZmVyZW5jZWQgZGlyZWN0bHkgd2l0aCB0aGUgIiQiIG9wZXJhdG9yIGluIGxpZXUgb2YgdGhlIGRvdWJsZSBzcXVhcmUgYnJhY2tldCBvcGVyYXRvci4KCmBgYHtyfQp2JGJvYiAKCmBgYAoKTWF0cml4CgpBIG1hdHJpeCBpcyBhIGNvbGxlY3Rpb24gb2YgZGF0YSBlbGVtZW50cyBhcnJhbmdlZCBpbiBhIHR3by1kaW1lbnNpb25hbCByZWN0YW5ndWxhciBsYXlvdXQuIFRoZSBkYXRhIGVsZW1lbnRzIG11c3QgYmUgb2YgdGhlIHNhbWUgYmFzaWMgdHlwZQoKYGBge3J9CkEgPSBtYXRyaXgoYygyLCA0LCAzLCAxLCA1LCA3KSwgIyB0aGUgZGF0YSBlbGVtZW50cyAKICAgICAgICAgICBucm93PTIsICAgICAgICAgICAgICAjIG51bWJlciBvZiByb3dzIAogICAgICAgICAgIG5jb2w9MywgICAgICAgICAgICAgICMgbnVtYmVyIG9mIGNvbHVtbnMKICAgICAgICAgICBieXJvdyA9IFRSVUUpICAgICAgICAjIGZpbGwgbWF0cml4IGJ5IHJvd3MgCiAKQSAgICAgICAgICAgICAgICAgICAgICAjIHByaW50IHRoZSBtYXRyaXggCgpgYGAKCkFuIGVsZW1lbnQgYXQgdGhlIG10aCByb3csIG50aCBjb2x1bW4gb2YgQSBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIGV4cHJlc3Npb24gQVttLCBuXS4KCmBgYHtyfQpBWzIsIDNdICAgICAgIyBlbGVtZW50IGF0IDJuZCByb3csIDNyZCBjb2x1bW4gCgpgYGAKClRoZSBlbnRpcmUgbXRoIHJvdyBBIGNhbiBiZSBleHRyYWN0ZWQgYXMgQVttLCBdLgoKYGBge3J9CkFbMiwgXSAjIDJuZCByb3cKCmBgYAoKU2ltaWxhcmx5LCB0aGUgZW50aXJlIG50aCBjb2x1bW4gQSBjYW4gYmUgZXh0cmFjdGVkIGFzIEFbICxuXS4KCgpgYGB7cn0KQVsgLDNdICAgICAgICMgdGhlIDNyZCBjb2x1bW4gCgpgYGAKCgpXZSBjYW4gYWxzbyBleHRyYWN0IG1vcmUgdGhhbiBvbmUgcm93cyBvciBjb2x1bW5zIGF0IGEgdGltZS4KCmBgYHtyfQoKQVsgLGMoMSwzKV0gICMgdGhlIDFzdCBhbmQgM3JkIGNvbHVtbnMgCgpgYGAKCk1hdHJpeCBDb25zdHJ1Y3Rpb24KClRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gY29uc3RydWN0IGEgbWF0cml4LiBXaGVuIHdlIGNvbnN0cnVjdCBhIG1hdHJpeCBkaXJlY3RseSB3aXRoIGRhdGEgZWxlbWVudHMsIHRoZSBtYXRyaXggY29udGVudCBpcyBmaWxsZWQgYWxvbmcgdGhlIGNvbHVtbiBvcmllbnRhdGlvbiBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQsIHRoZSBjb250ZW50IG9mIEIgaXMgZmlsbGVkIGFsb25nIHRoZSBjb2x1bW5zIGNvbnNlY3V0aXZlbHkuCgpgYGB7cn0KCkIgPSBtYXRyaXgoYygyLCA0LCAzLCAxLCA1LCA3KSwgCiAgICAgICAgICAgbnJvdz0zLCAKICAgICAgICAgICBuY29sPTIpIAogCkIgICAgICAgICAgICAgIyBCIGhhcyAzIHJvd3MgYW5kIDIgY29sdW1ucyAKYGBgClRyYW5zcG9zZQpXZSBjb25zdHJ1Y3QgdGhlIHRyYW5zcG9zZSBvZiBhIG1hdHJpeCBieSBpbnRlcmNoYW5naW5nIGl0cyBjb2x1bW5zIGFuZCByb3dzIHdpdGggdGhlIGZ1bmN0aW9uIHQgLgoKYGBge3J9CnQoQikgICAgICAgICAgIyB0cmFuc3Bvc2Ugb2YgQiAKCmBgYAoKQ29tYmluaW5nIE1hdHJpY2VzClRoZSBjb2x1bW5zIG9mIHR3byBtYXRyaWNlcyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIHJvd3MgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBsYXJnZXIgbWF0cml4LiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGFub3RoZXIgbWF0cml4IEMgYWxzbyB3aXRoIDMgcm93cy4KCmBgYHtyfQoKQyA9IG1hdHJpeChjKDcsIDQsIDIpLG5yb3c9MyxuY29sPTEpIAogCkMgICAgICAgICAgICAgIyBDIGhhcyAzIHJvd3MgCmBgYApUaGVuIHdlIGNhbiBjb21iaW5lIHRoZSBjb2x1bW5zIG9mIEIgYW5kIEMgd2l0aCBjYmluZC4KCmBgYHtyfQpjYmluZChCLCBDKSAKCmBgYAoKU2ltaWxhcmx5LCB3ZSBjYW4gY29tYmluZSB0aGUgcm93cyBvZiB0d28gbWF0cmljZXMgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBjb2x1bW5zIHdpdGggdGhlIHJiaW5kIGZ1bmN0aW9uLgoKYGBge3J9CkQgPSBtYXRyaXgoYyg2LCAyKSxucm93PTEsbmNvbD0yKSAKIApEICAgICAgICAgICAgICMgRCBoYXMgMiBjb2x1bW5zIAoKcmJpbmQoQiwgRCkgCmBgYAo=