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=