This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.
plot(cars)
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Cmd+Option+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Cmd+Shift+K to preview the HTML file).
Numerical Vectors
Assignment
Vector is a single entity consisting of an ordered collection of numbers.
x <- c(1,2,3,4,5)
print(x)
y <- c(x, 0, x)
y
Vector arithmetic
Vectors can be used in arithmetic expressions, in which case the operations are performed element by element.
a <- c(1,2,3)
b <- c(4,5,6)
a + b
If the vectors are not of the same length, shorter vectors in the expression are recycled as often as need be (perhaps fractionally) until they match the length of the longest vector.
d <- c(4,5,6,7,8,9)
a + d
In this case, the vector “a” is automatically recycled to be [1 2 3 1 2 3].
Common functions
x <- c(1,2,3,4,5,6,6,6)
max(x) # largest element
min(x) # smallest element
sum(x) # the total of the elements in x
prod(x) # the product
Generate sequence
a <- 1:10
a
b <- seq(0,5,by=.5)
b
By default, by is set to be 1.
c <- seq(1,5)
c
You can also specify the length of the vector.
d <- seq(1,5,length.out = 9)
d
length(d)
Another useful function is rep
, which replicates an object in various complicated ways. You can repeat a single value.
rep(1, times = 5)
You can also repeat a vector. By setting the parameter times
, you will put the vector end-to-end in a new vector. By setting each
, you will repeat each element of the vector before proceeding to the next one.
a <- 1:5
rep(a, times = 3)
rep(a, each = 3)
Logical Vectors
The elements of a logical vector can have the values TRUE, FALSE, and NA (for “not available”, see below).
x <- 10
logical <- x > 5
logical
You can also test a vector. In this case, the test will be on each element.
x <- c(1,2,3,4,5)
x > 3
The logical operators are <, <=, >, >=, ==
for exact equality and !=
for inequality. In addition if c1 and c2 are logical expressions, then c1 & c2
is their intersection (and), c1 | c2
is their union (or), and !c1
is the negation of c1.
c1 <- c(TRUE, TRUE, FALSE)
c2 <- c(TRUE, FALSE, FALSE)
c1 | c2
c1 & c2
!c1
Character Vectors
We can also store characters in a vector. In the following case, the numerical number 189
is automatically transfered to character.
char1 <- c("Math", 189, "is", "fun")
char1
One very useful function for character vector is paste
. The paste()
function takes an arbitrary number of arguments and concatenates them one by one into character strings.
paste("Math", 189)
paste(c("Math", "CSE"), c(100, 120))
paste(c("Math", "CSE"), c(100, 120), sep = "")
Index of Vectors
Given a vector, in many cases we want to modify a subset of that vector. Here are some common ways to subset.
Logical subset
Choose the elements of x
that are larger than 3.
x <- c(1,2,3,4,5)
y <- x[x > 3]
y
Choose the elements of x
that are not NA.
x <- c(1,2,3,NA,5)
y <- x[!is.na(x)]
y
x <- c(1,2,3,NA,5,6,NA)
x[!is.na(x) & x>2]
Positive integer index
The index in this case must lie in the set {1, 2, . . ., length(x)}
. Remember, the index set has to be a number of a vector itself. In the following example, if you directly type x[1,3,6]
, you will get an error message.
x <- c(1,2,4,5,7,10,15)
x[c(1,3,6)]
The corresponding elements of the vector are selected and concatenated, in that order, in the result.
x <- c(1,2,4,5,7,10,15)
x[c(3,3,1,1,1,1,1,2)]
Negative integer index
A negative index specifies the values to be excluded rather than included.
x <- c(1,3,10,189,289)
x[-(1:3)]
Character index
You can subset using character index only when an object has a names
attribute to identify its components.
grades <- c(100, 90, 87, 95, 95)
names(grades) <- c("Jelena", "Alice", "Aaron", "Alex", "Jiaqi")
lab <- grades[c("Jelena", "Alex", "Jiaqi")]
lab
Array and Matrix
Array
The largest difference between array and vector is **array* object has a dim
attribute. The dim
of a vector is NULL
.
x <- c(1,2,3,4,5)
dim(x)
class(x)
We can assign a dim
attribute to make it an 1-by-5 array (matrix).
dim(x) <- c(1,5)
class(x)
x
Now let’s create a 4-by-5 matrix.
x <- 1:20
dim(x) <- c(4,5)
x
A more quick way to create the array(matrix) in previous example.
x <- array(1:20, dim=c(4,5))
x
Index of array
Extract a subarray (submatrix).
x <- array(1:20, dim=c(4,5))
x[3,4]
x[c(1,3,4), c(2,5)]
Class
At the end of lab 1, we will talk about class. All objects in R have a class, reported by the function class
. It can be used to allow for an object-oriented style of programming in R. For example, in the later labs, we will learn different regression methods. Most of them will share the same prediction function predict
. However, when you pass in different classes, the predict
function will react to the argument sensitive to its class.
x <- NA
class(x)
x <- c(1,2,3)
class(x)
x <- array(1:4, dim=c(2,2))
class(x)
LS0tCnRpdGxlOiAiTWF0aCAxODkvMjg5IExhYiAxIgphdXRob3I6ICJBbGV4IExpIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiBXaGVuIHlvdSBleGVjdXRlIGNvZGUgd2l0aGluIHRoZSBub3RlYm9vaywgdGhlIHJlc3VsdHMgYXBwZWFyIGJlbmVhdGggdGhlIGNvZGUuIAoKVHJ5IGV4ZWN1dGluZyB0aGlzIGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqUnVuKiBidXR0b24gd2l0aGluIHRoZSBjaHVuayBvciBieSBwbGFjaW5nIHlvdXIgY3Vyc29yIGluc2lkZSBpdCBhbmQgcHJlc3NpbmcgKkNtZCtTaGlmdCtFbnRlciouIAoKYGBge3J9CnBsb3QoY2FycykKYGBgCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ21kK09wdGlvbitJKi4KCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ21kK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuCgojIERvd25sb2FkIFIgYW5kIFJzdHVkaW8KRG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFJzdHVkaW8gaGVyZTogaHR0cHM6Ly93d3cucnN0dWRpby5jb20vcHJvZHVjdHMvcnN0dWRpby9kb3dubG9hZC8KCklmIHlvdSBkb24ndCBoYXZlIFIsIGRvd25sb2FkIGl0IGhlcmU6Cmh0dHBzOi8vY3Jhbi5yc3R1ZGlvLmNvbS8KCiMgTnVtZXJpY2FsIFZlY3RvcnMKIyMjIEFzc2lnbm1lbnQKVmVjdG9yIGlzIGEgc2luZ2xlIGVudGl0eSBjb25zaXN0aW5nIG9mIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBudW1iZXJzLgpgYGB7cn0KeCA8LSBjKDEsMiwzLDQsNSkKcHJpbnQoeCkKYGBgCmBgYHtyfQp5IDwtIGMoeCwgMCwgeCkKeQpgYGAKCiMjIyBWZWN0b3IgYXJpdGhtZXRpYwpWZWN0b3JzIGNhbiBiZSB1c2VkIGluIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIGluIHdoaWNoIGNhc2UgdGhlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBlbGVtZW50IGJ5IGVsZW1lbnQuCmBgYHtyfQphIDwtIGMoMSwyLDMpCmIgPC0gYyg0LDUsNikKYSArIGIKYGBgCklmIHRoZSB2ZWN0b3JzIGFyZSBub3Qgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaG9ydGVyIHZlY3RvcnMgaW4gdGhlIGV4cHJlc3Npb24gYXJlIHJlY3ljbGVkIGFzIG9mdGVuIGFzIG5lZWQgYmUgKHBlcmhhcHMgZnJhY3Rpb25hbGx5KSB1bnRpbCB0aGV5IG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgdmVjdG9yLgpgYGB7cn0KZCA8LSBjKDQsNSw2LDcsOCw5KQphICsgZApgYGAKSW4gdGhpcyBjYXNlLCB0aGUgdmVjdG9yICJhIiBpcyBhdXRvbWF0aWNhbGx5IHJlY3ljbGVkIHRvIGJlIFsxIDIgMyAxIDIgM10uCgojIyMgQ29tbW9uIGZ1bmN0aW9ucwpgYGB7cn0KeCA8LSBjKDEsMiwzLDQsNSw2LDYsNikKbWF4KHgpICMgbGFyZ2VzdCBlbGVtZW50Cm1pbih4KSAjIHNtYWxsZXN0IGVsZW1lbnQKc3VtKHgpICMgdGhlIHRvdGFsIG9mIHRoZSBlbGVtZW50cyBpbiB4CnByb2QoeCkgIyB0aGUgcHJvZHVjdApgYGAKCiMjIyBHZW5lcmF0ZSBzZXF1ZW5jZQpgYGB7cn0KYSA8LSAxOjEwCmEKYiA8LSBzZXEoMCw1LGJ5PS41KQpiCmBgYApCeSBkZWZhdWx0LCAqYnkqIGlzIHNldCB0byBiZSAxLgpgYGB7cn0KYyA8LSBzZXEoMSw1KQpjCmBgYApZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IuCmBgYHtyfQpkIDwtIHNlcSgxLDUsbGVuZ3RoLm91dCA9IDkpCmQKbGVuZ3RoKGQpCmBgYApBbm90aGVyIHVzZWZ1bCBmdW5jdGlvbiBpcyBgcmVwYCwgd2hpY2ggcmVwbGljYXRlcyBhbiBvYmplY3QgaW4gdmFyaW91cyBjb21wbGljYXRlZAp3YXlzLiBZb3UgY2FuIHJlcGVhdCBhIHNpbmdsZSB2YWx1ZS4KYGBge3J9CnJlcCgxLCB0aW1lcyA9IDUpCmBgYApZb3UgY2FuIGFsc28gcmVwZWF0IGEgdmVjdG9yLiBCeSBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgYHRpbWVzYCwgeW91IHdpbGwgcHV0IHRoZSB2ZWN0b3IgZW5kLXRvLWVuZCBpbiBhIG5ldyB2ZWN0b3IuIEJ5IHNldHRpbmcgYGVhY2hgLCB5b3Ugd2lsbCByZXBlYXQgZWFjaCBlbGVtZW50IG9mIHRoZSB2ZWN0b3IgYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgb25lLgpgYGB7cn0KYSA8LSAxOjUKcmVwKGEsIHRpbWVzID0gMykKcmVwKGEsIGVhY2ggPSAzKQpgYGAKCiMgTG9naWNhbCBWZWN0b3JzClRoZSBlbGVtZW50cyBvZiBhIGxvZ2ljYWwgdmVjdG9yIGNhbiBoYXZlIHRoZSB2YWx1ZXMgKipUUlVFKiosICoqRkFMU0UqKiwgYW5kICoqTkEqKiAoZm9yIOKAnG5vdCBhdmFpbGFibGXigJ0sIHNlZSBiZWxvdykuCmBgYHtyfQp4IDwtIDEwCmxvZ2ljYWwgPC0geCA+IDUKbG9naWNhbApgYGAKWW91IGNhbiBhbHNvIHRlc3QgYSB2ZWN0b3IuIEluIHRoaXMgY2FzZSwgdGhlIHRlc3Qgd2lsbCBiZSBvbiBlYWNoIGVsZW1lbnQuCmBgYHtyfQp4IDwtIGMoMSwyLDMsNCw1KQp4ID4gMwpgYGAKVGhlIGxvZ2ljYWwgb3BlcmF0b3JzIGFyZSBgPCwgPD0sID4sID49LCA9PWAgZm9yIGV4YWN0IGVxdWFsaXR5IGFuZCBgIT1gIGZvciBpbmVxdWFsaXR5LiBJbiBhZGRpdGlvbiBpZiBjMSBhbmQgYzIgYXJlIGxvZ2ljYWwgZXhwcmVzc2lvbnMsIHRoZW4gYGMxICYgYzJgIGlzIHRoZWlyIGludGVyc2VjdGlvbiAoYW5kKSwgYGMxIHwgYzJgIGlzIHRoZWlyIHVuaW9uIChvciksIGFuZCBgIWMxYCBpcyB0aGUgbmVnYXRpb24gb2YgYzEuCmBgYHtyfQpjMSA8LSBjKFRSVUUsIFRSVUUsIEZBTFNFKQpjMiA8LSBjKFRSVUUsIEZBTFNFLCBGQUxTRSkKYzEgfCBjMgpjMSAmIGMyCiFjMQpgYGAKCiMgQ2hhcmFjdGVyIFZlY3RvcnMKV2UgY2FuIGFsc28gc3RvcmUgY2hhcmFjdGVycyBpbiBhIHZlY3Rvci4gSW4gdGhlIGZvbGxvd2luZyBjYXNlLCB0aGUgbnVtZXJpY2FsIG51bWJlciBgMTg5YCBpcyBhdXRvbWF0aWNhbGx5IHRyYW5zZmVyZWQgdG8gY2hhcmFjdGVyLgpgYGB7cn0KY2hhcjEgPC0gYygiTWF0aCIsIDE4OSwgImlzIiwgImZ1biIpCmNoYXIxCmBgYApPbmUgdmVyeSB1c2VmdWwgZnVuY3Rpb24gZm9yIGNoYXJhY3RlciB2ZWN0b3IgaXMgYHBhc3RlYC4gVGhlIGBwYXN0ZSgpYCBmdW5jdGlvbiB0YWtlcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgY29uY2F0ZW5hdGVzIHRoZW0gb25lIGJ5IG9uZSBpbnRvIGNoYXJhY3RlciBzdHJpbmdzLgpgYGB7cn0KcGFzdGUoIk1hdGgiLCAxODkpCnBhc3RlKGMoIk1hdGgiLCAiQ1NFIiksIGMoMTAwLCAxMjApKQpwYXN0ZShjKCJNYXRoIiwgIkNTRSIpLCBjKDEwMCwgMTIwKSwgc2VwID0gIiIpCmBgYAoKIyBJbmRleCBvZiBWZWN0b3JzCkdpdmVuIGEgdmVjdG9yLCBpbiBtYW55IGNhc2VzIHdlIHdhbnQgdG8gbW9kaWZ5IGEgc3Vic2V0IG9mIHRoYXQgdmVjdG9yLiBIZXJlIGFyZSBzb21lIGNvbW1vbiB3YXlzIHRvIHN1YnNldC4KCiMjIyBMb2dpY2FsIHN1YnNldApDaG9vc2UgdGhlIGVsZW1lbnRzIG9mIGB4YCB0aGF0IGFyZSBsYXJnZXIgdGhhbiAzLgpgYGB7cn0KeCA8LSBjKDEsMiwzLDQsNSkKeSA8LSB4W3ggPiAzXQp5CmBgYApDaG9vc2UgdGhlIGVsZW1lbnRzIG9mIGB4YCB0aGF0IGFyZSBub3QgTkEuCmBgYHtyfQp4IDwtIGMoMSwyLDMsTkEsNSkKeSA8LSB4WyFpcy5uYSh4KV0KeQpgYGAKYGBge3J9CnggPC0gYygxLDIsMyxOQSw1LDYsTkEpCnhbIWlzLm5hKHgpICYgeD4yXQpgYGAKCiMjIyBQb3NpdGl2ZSBpbnRlZ2VyIGluZGV4ClRoZSBpbmRleCBpbiB0aGlzIGNhc2UgbXVzdCBsaWUgaW4gdGhlIHNldCBgIHsxLCAyLCAuIC4gLiwgbGVuZ3RoKHgpfWAuIFJlbWVtYmVyLCB0aGUgaW5kZXggc2V0IGhhcyB0byBiZSBhIG51bWJlciBvZiBhIHZlY3RvciBpdHNlbGYuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgaWYgeW91IGRpcmVjdGx5IHR5cGUgYHhbMSwzLDZdYCwgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuCmBgYHtyfQp4IDwtIGMoMSwyLDQsNSw3LDEwLDE1KQp4W2MoMSwzLDYpXQpgYGAKVGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlIHZlY3RvciBhcmUgc2VsZWN0ZWQgYW5kIGNvbmNhdGVuYXRlZCwgKippbiB0aGF0IG9yZGVyKiosIGluIHRoZSByZXN1bHQuIApgYGB7cn0KeCA8LSBjKDEsMiw0LDUsNywxMCwxNSkKeFtjKDMsMywxLDEsMSwxLDEsMildCmBgYAoKIyMjIE5lZ2F0aXZlIGludGVnZXIgaW5kZXgKQSBuZWdhdGl2ZSBpbmRleCBzcGVjaWZpZXMgdGhlIHZhbHVlcyB0byBiZSBleGNsdWRlZCByYXRoZXIgdGhhbiBpbmNsdWRlZC4KYGBge3J9CnggPC0gYygxLDMsMTAsMTg5LDI4OSkKeFstKDE6MyldCmBgYAoKIyMjIENoYXJhY3RlciBpbmRleApZb3UgY2FuIHN1YnNldCB1c2luZyBjaGFyYWN0ZXIgaW5kZXggb25seSB3aGVuIGFuIG9iamVjdCBoYXMgYSBgbmFtZXNgIGF0dHJpYnV0ZSB0byBpZGVudGlmeSBpdHMgY29tcG9uZW50cy4KYGBge3J9CmdyYWRlcyA8LSBjKDEwMCwgOTAsIDg3LCA5NSwgOTUpCm5hbWVzKGdyYWRlcykgPC0gYygiSmVsZW5hIiwgIkFsaWNlIiwgIkFhcm9uIiwgIkFsZXgiLCAiSmlhcWkiKQpsYWIgPC0gZ3JhZGVzW2MoIkplbGVuYSIsICJBbGV4IiwgIkppYXFpIildCmxhYgpgYGAKCiMgQXJyYXkgYW5kIE1hdHJpeAojIyMgQXJyYXkKVGhlIGxhcmdlc3QgZGlmZmVyZW5jZSBiZXR3ZWVuICoqYXJyYXkqKiBhbmQgKip2ZWN0b3IqKiBpcyAqKmFycmF5KiBvYmplY3QgaGFzIGEgYGRpbWAgYXR0cmlidXRlLiBUaGUgYGRpbWAgb2YgYSB2ZWN0b3IgaXMgYE5VTExgLgpgYGB7cn0KeCA8LSBjKDEsMiwzLDQsNSkKZGltKHgpCmNsYXNzKHgpCmBgYApXZSBjYW4gYXNzaWduIGEgYGRpbWAgYXR0cmlidXRlIHRvIG1ha2UgaXQgYW4gMS1ieS01IGFycmF5IChtYXRyaXgpLgpgYGB7cn0KZGltKHgpIDwtIGMoMSw1KQpjbGFzcyh4KQp4CmBgYAoKTm93IGxldCdzIGNyZWF0ZSBhIDQtYnktNSBtYXRyaXguCmBgYHtyfQp4IDwtIDE6MjAKZGltKHgpIDwtIGMoNCw1KQp4CmBgYAoKQSBtb3JlIHF1aWNrIHdheSB0byBjcmVhdGUgdGhlIGFycmF5KG1hdHJpeCkgaW4gcHJldmlvdXMgZXhhbXBsZS4KYGBge3J9CnggPC0gYXJyYXkoMToyMCwgZGltPWMoNCw1KSkKeApgYGAKCiMjIyBJbmRleCBvZiBhcnJheQpFeHRyYWN0IGEgc3ViYXJyYXkgKHN1Ym1hdHJpeCkuCmBgYHtyfQp4IDwtIGFycmF5KDE6MjAsIGRpbT1jKDQsNSkpCnhbMyw0XQp4W2MoMSwzLDQpLCBjKDIsNSldCmBgYAoKIyBDbGFzcwpBdCB0aGUgZW5kIG9mIGxhYiAxLCB3ZSB3aWxsIHRhbGsgYWJvdXQgY2xhc3MuIEFsbCBvYmplY3RzIGluIFIgaGF2ZSBhIGNsYXNzLCByZXBvcnRlZCBieSB0aGUgZnVuY3Rpb24gYGNsYXNzYC4gSXQgY2FuIGJlIHVzZWQgdG8gYWxsb3cgZm9yIGFuIG9iamVjdC1vcmllbnRlZCBzdHlsZSBvZiBwcm9ncmFtbWluZyBpbiBSLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGxhdGVyIGxhYnMsIHdlIHdpbGwgbGVhcm4gZGlmZmVyZW50IHJlZ3Jlc3Npb24gbWV0aG9kcy4gTW9zdCBvZiB0aGVtIHdpbGwgc2hhcmUgdGhlIHNhbWUgcHJlZGljdGlvbiBmdW5jdGlvbiBgcHJlZGljdGAuIEhvd2V2ZXIsIHdoZW4geW91IHBhc3MgaW4gZGlmZmVyZW50IGNsYXNzZXMsIHRoZSBgcHJlZGljdGAgZnVuY3Rpb24gd2lsbCByZWFjdCB0byB0aGUgYXJndW1lbnQgc2Vuc2l0aXZlIHRvIGl0cyBjbGFzcy4KYGBge3J9CnggPC0gTkEKY2xhc3MoeCkKeCA8LSBjKDEsMiwzKQpjbGFzcyh4KQp4IDwtIGFycmF5KDE6NCwgZGltPWMoMiwyKSkKY2xhc3MoeCkKYGBgCgo=