Skip to content
Course Notes: Intermediate R
  • AI Chat
  • Code
  • Report
  • Course Notes

    Use this workspace to take notes, store code snippets, or build your own interactive cheatsheet! For courses that use data, the datasets will be available in the datasets folder.

    # Import any packages you want to use here
    

    Equality The most basic form of comparison is equality. Let's briefly recap its syntax. The following statements all evaluate to TRUE (feel free to try them out in the console).

    3 == (2 + 1) "intermediate" != "r" TRUE != FALSE "Rchitect" != "rchitect" Notice from the last expression that R is case sensitive: "R" is not equal to "r". Keep this in mind when solving the exercises in this chapter!

    In the editor on the right, write R code to see if TRUE equals FALSE. Likewise, check if -6 * 14 is not equal to 17 - 101. Next up: comparison of character strings. Ask R whether the strings "useR" and "user" are equal. Finally, find out what happens if you compare logicals to numerics: are TRUE and 1 equal?

    # Comparison of logicals
    TRUE == FALSE
    [1] FALSE
    # Comparison of numerics
    -6 * 14 != 17 - 101
    [1] FALSE
    # Comparison of character strings
    "useR" == "user"
    [1] FALSE
    # Compare a logical with a numeric
    TRUE == 1
    [1] TRUE
    
    Awesome! Since TRUE coerces to 1 under the hood, TRUE == 1 evaluates to TRUE. Make sure not to mix up == (comparison) and = (assignment), == is what need to check the equality of R objects.

    Greater and less than Apart from equality operators, Filip also introduced the less than and greater than operators: < and >. You can also add an equal sign to express less than or equal to or greater than or equal to, respectively. Have a look at the following R expressions, that all evaluate to FALSE:

    (1 + 2) > 4 "dog" < "Cats" TRUE <= FALSE Remember that for string comparison, R determines the greater than relationship based on alphabetical order. Also, keep in mind that TRUE is treated as 1 for arithmetic, and FALSE is treated as 0. Therefore, FALSE < TRUE is TRUE. Write R expressions to check whether:

    -6 * 5 + 2 is greater than or equal to -10 + 1. "raining" is less than or equal to "raining dogs". TRUE is greater than FALSE.

    # Comparison of numerics
    -6 * 5 + 2 >= -10 + 1
    [1] FALSE
    # Comparison of character strings
    "raining" <= "raining dogs"
    [1] TRUE
    # Comparison of logicals
    TRUE > FALSE
    [1] TRUE

    Compare vectors You are already aware that R is very good with vectors. Without having to change anything about the syntax, R's relational operators also work on vectors.

    Let's go back to the example that was started in the video. You want to figure out whether your activity on social media platforms have paid off and decide to look at your results for LinkedIn and Facebook. The sample code in the editor initializes the vectors linkedin and facebook. Each of the vectors contains the number of profile views your LinkedIn and Facebook profiles had over the last seven days. Using relational operators, find a logical answer, i.e. TRUE or FALSE, for the following questions:

    On which days did the number of LinkedIn profile views exceed 15? When was your LinkedIn profile viewed only 5 times or fewer? When was your LinkedIn profile visited more often than your Facebook profile?

    # Popular days
    linkedin > 15
    [1]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE
    # Quiet days
    linkedin <= 5
    [1] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
    # LinkedIn more popular than Facebook
    linkedin > facebook
    [1] FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE
    Wonderful! Have a look at the console output. Your LinkedIn profile was pretty popular on the sixth day, but less so on the fourth and fifth day.

    Compare matrices R's ability to deal with different data structures for comparisons does not stop at vectors. Matrices and relational operators also work together seamlessly!

    Instead of in vectors (as in the previous exercise), the LinkedIn and Facebook data is now stored in a matrix called views. The first row contains the LinkedIn information; the second row the Facebook information. The original vectors facebook and linkedin are still available as well. Using the relational operators you've learned so far, try to discover the following:

    When were the views exactly equal to 13? Use the views matrix to return a logical matrix. For which days were the number of views less than or equal to 14? Again, have R return a logical matrix.

    # The social data has been created for you
    linkedin <- c(16, 9, 13, 5, 2, 17, 14)
    facebook <- c(17, 7, 5, 16, 8, 13, 14)
    views <- matrix(c(linkedin, facebook), nrow = 2, byrow = TRUE)
    # When does views equal 13?
    views == 13
          [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]
    [1,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
    [2,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
    # When is views less than or equal to 14?
    views <= 14
          [,1] [,2] [,3]  [,4] [,5]  [,6] [,7]
    [1,] FALSE TRUE TRUE  TRUE TRUE FALSE TRUE
    [2,] FALSE TRUE TRUE FALSE TRUE  TRUE TRUE
    
    Nice job! This exercise concludes the part on comparators. Now that you know how to query the relation between R objects, the next step will be to use the results to alter the behavior of your programs. Find out all about that in the next video!

    & and | Before you work your way through the next exercises, have a look at the following R expressions. All of them will evaluate to TRUE:

    TRUE & TRUE FALSE | TRUE 5 <= 5 & 2 < 3 3 < 4 | 7 < 6 Watch out: 3 < x < 7 to check if x is between 3 and 7 will not work; you'll need 3 < x & x < 7 for that.

    In this exercise, you'll be working with the last variable. This variable equals the last value of the linkedin vector that you've worked with previously. The linkedin vector represents the number of LinkedIn views your profile had in the last seven days, remember? Both the variables linkedin and last have been pre-defined for you. Write R expressions to solve the following questions concerning the variable last:

    Is last under 5 or above 10? Is last between 15 and 20, excluding 15 but including 20?

    # The linkedin and last variable are already defined for you
    linkedin <- c(16, 9, 13, 5, 2, 17, 14)
    last <- tail(linkedin, 1)
    # Is last under 5 or above 10?
    5 > last | last > 10
    [1] TRUE
    # Is last between 15 (exclusive) and 20 (inclusive)?
    15 < last & last < 20 
    [1] FALSE

    & and | (2) Like relational operators, logical operators work perfectly fine with vectors and matrices.

    Both the vectors linkedin and facebook are available again. Also a matrix - views - has been defined; its first and second row correspond to the linkedin and facebook vectors, respectively. Ready for some advanced queries to gain more insights into your social outreach? When did LinkedIn views exceed 10 and did Facebook views fail to reach 10 for a particular day? Use the linkedin and facebook vectors. When were one or both of your LinkedIn and Facebook profiles visited at least 12 times? When is the views matrix equal to a number between 11 and 14, excluding 11 and including 14?

    # The social data (linkedin, facebook, views) has been created for you
    # linkedin exceeds 10 but facebook below 10
    linkedin > 10 & facebook < 10
    [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
    # When were one or both visited at least 12 times?
    linkedin >= 12 | facebook >= 12
    [1]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
    # When is views between 11 (exclusive) and 14 (inclusive)?
    11 < views & views <= 14
          [,1]  [,2]  [,3]  [,4]  [,5]  [,6] [,7]
    [1,] FALSE FALSE  TRUE FALSE FALSE FALSE TRUE
    [2,] FALSE FALSE FALSE FALSE FALSE  TRUE TRUE
    
    Bravo! You'll have noticed how easy it is to use logical operators to vectors and matrices. What do these results tell us? The third day of the recordings was the only day where your LinkedIn profile was visited more than 10 times, while your Facebook profile wasn't. Can you draw similar conclusions for the other results?

    Reverse the result: ! On top of the & and | operators, you also learned about the ! operator, which negates a logical value. To refresh your memory, here are some R expressions that use !. They all evaluate to FALSE:

    !TRUE !(5 > 3) !!FALSE What would the following set of R expressions return?

    x <- 5 y <- 7 !(!(x < 4) & !!!(y > 12)) ---> [1] False