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)
LS0tDQp0aXRsZTogIkRhdGEgU3RydWN0dXJlIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KQSBsaXN0IGlzIGEgZ2VuZXJpYyB2ZWN0b3IgY29udGFpbmluZyBvdGhlciBvYmplY3RzLg0KDQpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSB4IGlzIGEgbGlzdCBjb250YWluaW5nIGNvcGllcyBvZiB0aHJlZSB2ZWN0b3JzIG4sIHMsIGIsIGFuZCBhIG51bWVyaWMgdmFsdWUgMy4NCg0KDQoNCmBgYHtyfQ0KbiA9IGMoMiwgMywgNSkgDQpzID0gYygiYWEiLCAiYmIiLCAiY2MiLCAiZGQiLCAiZWUiKSANCmIgPSBjKFRSVUUsIEZBTFNFLCBUUlVFLCBGQUxTRSwgRkFMU0UpIA0KeCA9IGxpc3QobiwgcywgYiwgMykgICAjIHggY29udGFpbnMgY29waWVzIG9mIG4sIHMsIGINCg0KYGBgDQoNCkxpc3QgU2xpY2luZw0KV2UgcmV0cmlldmUgYSBsaXN0IHNsaWNlIHdpdGggdGhlIHNpbmdsZSBzcXVhcmUgYnJhY2tldCAiW10iIG9wZXJhdG9yLiBUaGUgZm9sbG93aW5nIGlzIGEgc2xpY2UgY29udGFpbmluZyB0aGUgc2Vjb25kIG1lbWJlciBvZiB4LCB3aGljaCBpcyBhIGNvcHkgb2Ygcy4NCg0KYGBge3J9DQp4WzNdDQoNCmBgYA0KDQoNCldpdGggYW4gaW5kZXggdmVjdG9yLCB3ZSBjYW4gcmV0cmlldmUgYSBzbGljZSB3aXRoIG11bHRpcGxlIG1lbWJlcnMuIEhlcmUgYSBzbGljZSBjb250YWluaW5nIHRoZSBzZWNvbmQgYW5kIGZvdXJ0aCBtZW1iZXJzIG9mIHgNCg0KYGBge3J9DQp4W2MoMiwgNCldIA0KDQpgYGANCg0KTWVtYmVyIFJlZmVyZW5jZQ0KSW4gb3JkZXIgdG8gcmVmZXJlbmNlIGEgbGlzdCBtZW1iZXIgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBkb3VibGUgc3F1YXJlIGJyYWNrZXQgIltbXV0iIG9wZXJhdG9yLiBUaGUgZm9sbG93aW5nIG9iamVjdCB4W1syXV0gaXMgdGhlIHNlY29uZCBtZW1iZXIgb2YgeC4gSW4gb3RoZXIgd29yZHMsIHhbWzJdXSBpcyBhIGNvcHkgb2YgcywgYnV0IGlzIG5vdCBhIHNsaWNlIGNvbnRhaW5pbmcgcyBvciBpdHMgY29weS4NCg0KYGBge3J9DQp4W1syXV0NCg0KYGBgDQoNCldlIGNhbiBtb2RpZnkgaXRzIGNvbnRlbnQgZGlyZWN0bHkuDQoNCg0KYGBge3J9DQogeFtbMl1dWzFdID0gInRhIiANCiB4W1syXV0gDQogDQpgYGANCg0KTmFtZWQgTGlzdCBNZW1iZXJzDQoNCldlIGNhbiBhc3NpZ24gbmFtZXMgdG8gbGlzdCBtZW1iZXJzLCBhbmQgcmVmZXJlbmNlIHRoZW0gYnkgbmFtZXMgaW5zdGVhZCBvZiBudW1lcmljIGluZGV4ZXMuDQoNCkZvciBleGFtcGxlLCBpbiB0aGUgZm9sbG93aW5nLCB2IGlzIGEgbGlzdCBvZiB0d28gbWVtYmVycywgbmFtZWQgImJvYiIgYW5kICJqb2huIi4NCg0KYGBge3J9DQp2ID0gbGlzdChib2I9YygyLCAzLCA1KSwgam9obj1jKCJhYSIsICJiYiIpKQ0Kdg0KDQpgYGANCg0KTGlzdCBTbGljaW5nDQpXZSByZXRyaWV2ZSBhIGxpc3Qgc2xpY2Ugd2l0aCB0aGUgc2luZ2xlIHNxdWFyZSBicmFja2V0ICJbXSIgb3BlcmF0b3IuIEhlcmUgaXMgYSBsaXN0IHNsaWNlIGNvbnRhaW5pbmcgYSBtZW1iZXIgb2YgdiBuYW1lZCAiYm9iIi4NCg0KYGBge3J9DQogdlsiYm9iIl0gDQpgYGANCldpdGggYW4gaW5kZXggdmVjdG9yLCB3ZSBjYW4gcmV0cmlldmUgYSBzbGljZSB3aXRoIG11bHRpcGxlIG1lbWJlcnMuIEhlcmUgaXMgYSBsaXN0IHNsaWNlIHdpdGggYm90aCBtZW1iZXJzIG9mIHYuIE5vdGljZSBob3cgdGhleSBhcmUgcmV2ZXJzZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbnMgaW4gdi4NCg0KYGBge3J9DQp2W2MoImpvaG4iLCAiYm9iIildIA0KDQpgYGANCg0KTWVtYmVyIFJlZmVyZW5jZQ0KSW4gb3JkZXIgdG8gcmVmZXJlbmNlIGEgbGlzdCBtZW1iZXIgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBkb3VibGUgc3F1YXJlIGJyYWNrZXQgIltbXV0iIG9wZXJhdG9yLiBUaGUgZm9sbG93aW5nIHJlZmVyZW5jZXMgYSBtZW1iZXIgb2YgdiBieSBuYW1lLg0KDQpgYGB7cn0NCiB2W1siYm9iIl1dIA0KDQpgYGANCg0KQSBuYW1lZCBsaXN0IG1lbWJlciBjYW4gYWxzbyBiZSByZWZlcmVuY2VkIGRpcmVjdGx5IHdpdGggdGhlICIkIiBvcGVyYXRvciBpbiBsaWV1IG9mIHRoZSBkb3VibGUgc3F1YXJlIGJyYWNrZXQgb3BlcmF0b3IuDQoNCmBgYHtyfQ0KdiRib2IgDQoNCmBgYA0KDQpNYXRyaXgNCg0KQSBtYXRyaXggaXMgYSBjb2xsZWN0aW9uIG9mIGRhdGEgZWxlbWVudHMgYXJyYW5nZWQgaW4gYSB0d28tZGltZW5zaW9uYWwgcmVjdGFuZ3VsYXIgbGF5b3V0LiBUaGUgZGF0YSBlbGVtZW50cyBtdXN0IGJlIG9mIHRoZSBzYW1lIGJhc2ljIHR5cGUNCg0KYGBge3J9DQpBID0gbWF0cml4KGMoMiwgNCwgMywgMSwgNSwgNyksICMgdGhlIGRhdGEgZWxlbWVudHMgDQogICAgICAgICAgIG5yb3c9MiwgICAgICAgICAgICAgICMgbnVtYmVyIG9mIHJvd3MgDQogICAgICAgICAgIG5jb2w9MywgICAgICAgICAgICAgICMgbnVtYmVyIG9mIGNvbHVtbnMNCiAgICAgICAgICAgYnlyb3cgPSBUUlVFKSAgICAgICAgIyBmaWxsIG1hdHJpeCBieSByb3dzIA0KIA0KQSAgICAgICAgICAgICAgICAgICAgICAjIHByaW50IHRoZSBtYXRyaXggDQoNCmBgYA0KDQpBbiBlbGVtZW50IGF0IHRoZSBtdGggcm93LCBudGggY29sdW1uIG9mIEEgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBleHByZXNzaW9uIEFbbSwgbl0uDQoNCmBgYHtyfQ0KQVsyLCAzXSAgICAgICMgZWxlbWVudCBhdCAybmQgcm93LCAzcmQgY29sdW1uIA0KDQpgYGANCg0KVGhlIGVudGlyZSBtdGggcm93IEEgY2FuIGJlIGV4dHJhY3RlZCBhcyBBW20sIF0uDQoNCmBgYHtyfQ0KQVsyLCBdICMgMm5kIHJvdw0KDQpgYGANCg0KU2ltaWxhcmx5LCB0aGUgZW50aXJlIG50aCBjb2x1bW4gQSBjYW4gYmUgZXh0cmFjdGVkIGFzIEFbICxuXS4NCg0KDQpgYGB7cn0NCkFbICwzXSAgICAgICAjIHRoZSAzcmQgY29sdW1uIA0KDQpgYGANCg0KDQpXZSBjYW4gYWxzbyBleHRyYWN0IG1vcmUgdGhhbiBvbmUgcm93cyBvciBjb2x1bW5zIGF0IGEgdGltZS4NCg0KYGBge3J9DQoNCkFbICxjKDEsMyldICAjIHRoZSAxc3QgYW5kIDNyZCBjb2x1bW5zIA0KDQpgYGANCg0KTWF0cml4IENvbnN0cnVjdGlvbg0KDQpUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGNvbnN0cnVjdCBhIG1hdHJpeC4gV2hlbiB3ZSBjb25zdHJ1Y3QgYSBtYXRyaXggZGlyZWN0bHkgd2l0aCBkYXRhIGVsZW1lbnRzLCB0aGUgbWF0cml4IGNvbnRlbnQgaXMgZmlsbGVkIGFsb25nIHRoZSBjb2x1bW4gb3JpZW50YXRpb24gYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0LCB0aGUgY29udGVudCBvZiBCIGlzIGZpbGxlZCBhbG9uZyB0aGUgY29sdW1ucyBjb25zZWN1dGl2ZWx5Lg0KDQpgYGB7cn0NCg0KQiA9IG1hdHJpeChjKDIsIDQsIDMsIDEsIDUsIDcpLCANCiAgICAgICAgICAgbnJvdz0zLCANCiAgICAgICAgICAgbmNvbD0yKSANCiANCkIgICAgICAgICAgICAgIyBCIGhhcyAzIHJvd3MgYW5kIDIgY29sdW1ucyANCmBgYA0KVHJhbnNwb3NlDQpXZSBjb25zdHJ1Y3QgdGhlIHRyYW5zcG9zZSBvZiBhIG1hdHJpeCBieSBpbnRlcmNoYW5naW5nIGl0cyBjb2x1bW5zIGFuZCByb3dzIHdpdGggdGhlIGZ1bmN0aW9uIHQgLg0KDQpgYGB7cn0NCnQoQikgICAgICAgICAgIyB0cmFuc3Bvc2Ugb2YgQiANCg0KYGBgDQoNCkNvbWJpbmluZyBNYXRyaWNlcw0KVGhlIGNvbHVtbnMgb2YgdHdvIG1hdHJpY2VzIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygcm93cyBjYW4gYmUgY29tYmluZWQgaW50byBhIGxhcmdlciBtYXRyaXguIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgYW5vdGhlciBtYXRyaXggQyBhbHNvIHdpdGggMyByb3dzLg0KDQpgYGB7cn0NCg0KQyA9IG1hdHJpeChjKDcsIDQsIDIpLG5yb3c9MyxuY29sPTEpIA0KIA0KQyAgICAgICAgICAgICAjIEMgaGFzIDMgcm93cyANCmBgYA0KVGhlbiB3ZSBjYW4gY29tYmluZSB0aGUgY29sdW1ucyBvZiBCIGFuZCBDIHdpdGggY2JpbmQuDQoNCmBgYHtyfQ0KY2JpbmQoQiwgQykgDQoNCmBgYA0KDQpTaW1pbGFybHksIHdlIGNhbiBjb21iaW5lIHRoZSByb3dzIG9mIHR3byBtYXRyaWNlcyBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aCB0aGUgcmJpbmQgZnVuY3Rpb24uDQoNCmBgYHtyfQ0KRCA9IG1hdHJpeChjKDYsIDIpLG5yb3c9MSxuY29sPTIpIA0KIA0KRCAgICAgICAgICAgICAjIEQgaGFzIDIgY29sdW1ucyANCg0KcmJpbmQoQiwgRCkgDQpgYGANCg==