Christian Sekulovic und Julius Schmid

Task: Create a notebook explaining the importance and use of loops in R-Programming.

This is the final project assignment for the course Program for Data Analytics (CIS-543). We will discuss the importance of different types of loops in R, and will present use cases.

First of all, let us begin with the definition of a loop:

Loops are a programming element that repeat a portion of code a set number of times until the desired process is complete. Repetitive tasks are common in programming, and loops are essential to save time and minimize errors.

Further, the programming language R is very good at performing repetitive tasks. If we want a set of operations to be repeated several times we use loops. When you create a loop, R will execute the instructions in the loop a specified number of times or until a specified condition is met. There are three main types of loops in R:

  1. For Loops
  2. While Loops
  3. Repeat Loops

Let us now consider each type of loop individually with an example.

1. For Loops

The purpose of the for loop is to execute a code a fixed number of times or for each element within a list or vector. The variable which represents the number of repititions is an integer and is usually defined with a fixed value at the start of the loop.

Note that a for loop can always be replaced by a vectorized statement.

The syntax for a for loop is given by “for (k in lower_bound:upper_bound){code that is repeated while lower_bound <= k <= upper_bound}”.

Consider the following example for a for loop:

n <- 10
factorial <- 1

for (k in 1:n){
  factorial <- factorial * k
  print(factorial)
}
[1] 1
[1] 2
[1] 6
[1] 24
[1] 120
[1] 720
[1] 5040
[1] 40320
[1] 362880
[1] 3628800

In this example, we created the factorials of the numbers 1 through 10, using a for loop with running variable k.

2. While Loop

Another type of loop is the while loop. The while loop is used when you want to keep looping until a specific logical condition is satisfied (contrast this with the for loop which will always iterate through an entire sequence).

Since the code within the loop is repeated as long as the statement is true, you have to be careful that you accidentally produce an “eternal” loop that never stops in case the statement is always true. The code then has to be manually terminated to stop it from running infinitely long.

The syntax for a while loop is given by “while (boolean statement){code that is repeated while statement is true}”.

Consider an example where we roll a dice and consider it a success when we roll a 6. We keep rolling until we roll the 6. Admittedly, the outcome for the dice in this case is independent from any probabilities.

dice <- 1
while (dice <= 6) {
  if (dice < 6) {
    print("No success")
  } else {
    print("Success!")
  }
  dice <- dice + 1
}
[1] "No success"
[1] "No success"
[1] "No success"
[1] "No success"
[1] "No success"
[1] "Success!"

We execute the code while the outcome of the dice is less than or equal to 6. At the moment when the dice variable is set to 7 in the last running period, the statement dice <= 6 becomes false and we quit the loop.

3. Repeat Loops

A repeat loop is used to iterate over a block of code multiple number of times. There is no condition check in repeat loop to exit the loop.

Note that we must ourselves put a condition explicitly inside the body of the loop and use the break statement to exit the loop. Failing to do so will result into an infinite loop.

The syntax for a repeat loop is given by “repeat {statement}” where we need to include an if statement together a “break” when the if-statement is true. Remember that the if statement necessarily needs to become true at some point.

Consider the following example:

df <- data.frame(A=c(0,0,0,0),
                 B=c(0,0,0,0))
x <- 0

repeat{
  x <- x+1
  df$A[x] <- x
  df$B[x] <- x * 2

  if(x >= nrow(df)){
  break
  }
}

Here, we create a data frame with two columns and four rows and use the repeat loop to fill the data frame with concrete values by increasing the index variable x by 1 each time we repeat the loop. The if statement in this case ensures that we only update values in the data frame that actually exist. The moment that our index variable x becomes bigger than the number of rows, we call break and exit the repeat loop.

References:

[1] https://intro2r.com/loops.html

[2] http://support.kodable.com/en/articles/417331-what-are-loop

[3] https://www.w3schools.com/r/r_while_loop.asp

[4] https://www.datamentor.io/r-programming/repeat-loop/

LS0tCnRpdGxlOiAiUHJvamVjdCAyOiBMb29wcyBpbiBSLVByb2dyYW1taW5nIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpDaHJpc3RpYW4gU2VrdWxvdmljIHVuZCBKdWxpdXMgU2NobWlkCgoqKlRhc2s6IENyZWF0ZSBhIG5vdGVib29rIGV4cGxhaW5pbmcgdGhlIGltcG9ydGFuY2UgYW5kIHVzZSBvZiBsb29wcyBpbiBSLVByb2dyYW1taW5nLioqCgpUaGlzIGlzIHRoZSBmaW5hbCBwcm9qZWN0IGFzc2lnbm1lbnQgZm9yIHRoZSBjb3Vyc2UgUHJvZ3JhbSBmb3IgRGF0YSBBbmFseXRpY3MgKENJUy01NDMpLiBXZSB3aWxsIGRpc2N1c3MgdGhlIGltcG9ydGFuY2Ugb2YgZGlmZmVyZW50IHR5cGVzIG9mIGxvb3BzIGluIFIsIGFuZCB3aWxsIHByZXNlbnQgdXNlIGNhc2VzLgoKRmlyc3Qgb2YgYWxsLCBsZXQgdXMgYmVnaW4gd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBhIGxvb3A6CgoqKkxvb3BzKiogYXJlIGEgcHJvZ3JhbW1pbmcgZWxlbWVudCB0aGF0IHJlcGVhdCBhIHBvcnRpb24gb2YgY29kZSBhIHNldCBudW1iZXIgb2YgdGltZXMgdW50aWwgdGhlIGRlc2lyZWQgcHJvY2VzcyBpcyBjb21wbGV0ZS4gUmVwZXRpdGl2ZSB0YXNrcyBhcmUgY29tbW9uIGluIHByb2dyYW1taW5nLCBhbmQgbG9vcHMgYXJlIGVzc2VudGlhbCB0byBzYXZlIHRpbWUgYW5kIG1pbmltaXplIGVycm9ycy4KCkZ1cnRoZXIsIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBSIGlzIHZlcnkgZ29vZCBhdCBwZXJmb3JtaW5nIHJlcGV0aXRpdmUgdGFza3MuIElmIHdlIHdhbnQgYSBzZXQgb2Ygb3BlcmF0aW9ucyB0byBiZSByZXBlYXRlZCBzZXZlcmFsIHRpbWVzIHdlIHVzZSBsb29wcy4gV2hlbiB5b3UgY3JlYXRlIGEgbG9vcCwgUiB3aWxsIGV4ZWN1dGUgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgbG9vcCBhIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMgb3IgdW50aWwgYSBzcGVjaWZpZWQgY29uZGl0aW9uIGlzIG1ldC4gVGhlcmUgYXJlIHRocmVlIG1haW4gdHlwZXMgb2YgbG9vcHMgaW4gUjogCgoxLiBGb3IgTG9vcHMKMi4gV2hpbGUgTG9vcHMgCjMuIFJlcGVhdCBMb29wcwoKTGV0IHVzIG5vdyBjb25zaWRlciBlYWNoIHR5cGUgb2YgbG9vcCBpbmRpdmlkdWFsbHkgd2l0aCBhbiBleGFtcGxlLgoKCioqMS4gRm9yIExvb3BzKioKClRoZSBwdXJwb3NlIG9mIHRoZSBmb3IgbG9vcCBpcyB0byBleGVjdXRlIGEgY29kZSBhIGZpeGVkIG51bWJlciBvZiB0aW1lcyBvciBmb3IgZWFjaCBlbGVtZW50IHdpdGhpbiBhIGxpc3Qgb3IgdmVjdG9yLiBUaGUgdmFyaWFibGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHJlcGl0aXRpb25zIGlzIGFuIGludGVnZXIgYW5kIGlzIHVzdWFsbHkgZGVmaW5lZCB3aXRoIGEgZml4ZWQgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wLiAKCk5vdGUgdGhhdCBhIGZvciBsb29wIGNhbiBhbHdheXMgYmUgcmVwbGFjZWQgYnkgYSB2ZWN0b3JpemVkIHN0YXRlbWVudC4KClRoZSBzeW50YXggZm9yIGEgZm9yIGxvb3AgaXMgZ2l2ZW4gYnkgImZvciAoayBpbiBsb3dlcl9ib3VuZDp1cHBlcl9ib3VuZCl7Y29kZSB0aGF0IGlzIHJlcGVhdGVkIHdoaWxlIGxvd2VyX2JvdW5kIDw9IGsgPD0gdXBwZXJfYm91bmR9Ii4KCkNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgYSBmb3IgbG9vcDoKYGBge3J9Cm4gPC0gMTAKZmFjdG9yaWFsIDwtIDEKCmZvciAoayBpbiAxOm4pewogIGZhY3RvcmlhbCA8LSBmYWN0b3JpYWwgKiBrCiAgcHJpbnQoZmFjdG9yaWFsKQp9CmBgYApJbiB0aGlzIGV4YW1wbGUsIHdlIGNyZWF0ZWQgdGhlIGZhY3RvcmlhbHMgb2YgdGhlIG51bWJlcnMgMSB0aHJvdWdoIDEwLCB1c2luZyBhIGZvciBsb29wIHdpdGggcnVubmluZyB2YXJpYWJsZSBrLgoKKioyLiBXaGlsZSBMb29wKioKCkFub3RoZXIgdHlwZSBvZiBsb29wIGlzIHRoZSB3aGlsZSBsb29wLiBUaGUgd2hpbGUgbG9vcCBpcyB1c2VkIHdoZW4geW91IHdhbnQgdG8ga2VlcCBsb29waW5nIHVudGlsIGEgc3BlY2lmaWMgbG9naWNhbCBjb25kaXRpb24gaXMgc2F0aXNmaWVkIChjb250cmFzdCB0aGlzIHdpdGggdGhlIGZvciBsb29wIHdoaWNoIHdpbGwgYWx3YXlzIGl0ZXJhdGUgdGhyb3VnaCBhbiBlbnRpcmUgc2VxdWVuY2UpLiAKClNpbmNlIHRoZSBjb2RlIHdpdGhpbiB0aGUgbG9vcCBpcyByZXBlYXRlZCBhcyBsb25nIGFzIHRoZSBzdGF0ZW1lbnQgaXMgdHJ1ZSwgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCB0aGF0IHlvdSBhY2NpZGVudGFsbHkgcHJvZHVjZSBhbiAiZXRlcm5hbCIgbG9vcCB0aGF0IG5ldmVyIHN0b3BzIGluIGNhc2UgdGhlIHN0YXRlbWVudCBpcyBhbHdheXMgdHJ1ZS4gVGhlIGNvZGUgdGhlbiBoYXMgdG8gYmUgbWFudWFsbHkgdGVybWluYXRlZCB0byBzdG9wIGl0IGZyb20gcnVubmluZyBpbmZpbml0ZWx5IGxvbmcuCgpUaGUgc3ludGF4IGZvciBhIHdoaWxlIGxvb3AgaXMgZ2l2ZW4gYnkgIndoaWxlIChib29sZWFuIHN0YXRlbWVudCl7Y29kZSB0aGF0IGlzIHJlcGVhdGVkIHdoaWxlIHN0YXRlbWVudCBpcyB0cnVlfSIuCgpDb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHdlIHJvbGwgYSBkaWNlIGFuZCBjb25zaWRlciBpdCBhIHN1Y2Nlc3Mgd2hlbiB3ZSByb2xsIGEgNi4gV2Uga2VlcCByb2xsaW5nIHVudGlsIHdlIHJvbGwgdGhlIDYuIEFkbWl0dGVkbHksIHRoZSBvdXRjb21lIGZvciB0aGUgZGljZSBpbiB0aGlzIGNhc2UgaXMgaW5kZXBlbmRlbnQgZnJvbSBhbnkgcHJvYmFiaWxpdGllcy4gCmBgYHtyfQpkaWNlIDwtIDEKd2hpbGUgKGRpY2UgPD0gNikgewogIGlmIChkaWNlIDwgNikgewogICAgcHJpbnQoIk5vIHN1Y2Nlc3MiKQogIH0gZWxzZSB7CiAgICBwcmludCgiU3VjY2VzcyEiKQogIH0KICBkaWNlIDwtIGRpY2UgKyAxCn0KYGBgCldlIGV4ZWN1dGUgdGhlIGNvZGUgd2hpbGUgdGhlIG91dGNvbWUgb2YgdGhlIGRpY2UgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDYuIEF0IHRoZSBtb21lbnQgd2hlbiB0aGUgZGljZSB2YXJpYWJsZSBpcyBzZXQgdG8gNyBpbiB0aGUgbGFzdCBydW5uaW5nIHBlcmlvZCwgdGhlIHN0YXRlbWVudCBkaWNlIDw9IDYgYmVjb21lcyBmYWxzZSBhbmQgd2UgcXVpdCB0aGUgbG9vcC4KCgoqKjMuIFJlcGVhdCBMb29wcyoqCgpBIHJlcGVhdCBsb29wIGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGEgYmxvY2sgb2YgY29kZSBtdWx0aXBsZSBudW1iZXIgb2YgdGltZXMuClRoZXJlIGlzIG5vIGNvbmRpdGlvbiBjaGVjayBpbiByZXBlYXQgbG9vcCB0byBleGl0IHRoZSBsb29wLgoKTm90ZSB0aGF0IHdlIG11c3Qgb3Vyc2VsdmVzIHB1dCBhIGNvbmRpdGlvbiBleHBsaWNpdGx5IGluc2lkZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBhbmQgdXNlIHRoZSBicmVhayBzdGF0ZW1lbnQgdG8gZXhpdCB0aGUgbG9vcC4gRmFpbGluZyB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbnRvIGFuIGluZmluaXRlIGxvb3AuCgpUaGUgc3ludGF4IGZvciBhIHJlcGVhdCBsb29wIGlzIGdpdmVuIGJ5ICJyZXBlYXQge3N0YXRlbWVudH0iIHdoZXJlIHdlIG5lZWQgdG8gaW5jbHVkZSBhbiBpZiBzdGF0ZW1lbnQgdG9nZXRoZXIgYSAiYnJlYWsiIHdoZW4gdGhlIGlmLXN0YXRlbWVudCBpcyB0cnVlLiBSZW1lbWJlciB0aGF0IHRoZSBpZiBzdGF0ZW1lbnQgbmVjZXNzYXJpbHkgbmVlZHMgdG8gYmVjb21lIHRydWUgYXQgc29tZSBwb2ludC4gCgpDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CmBgYHtyfQpkZiA8LSBkYXRhLmZyYW1lKEE9YygwLDAsMCwwKSwKICAgICAgICAgICAgICAgICBCPWMoMCwwLDAsMCkpCnggPC0gMAoKcmVwZWF0ewogIHggPC0geCsxCiAgZGYkQVt4XSA8LSB4CiAgZGYkQlt4XSA8LSB4ICogMgoKICBpZih4ID49IG5yb3coZGYpKXsKICBicmVhawogIH0KfQpgYGAKSGVyZSwgd2UgY3JlYXRlIGEgZGF0YSBmcmFtZSB3aXRoIHR3byBjb2x1bW5zIGFuZCBmb3VyIHJvd3MgYW5kIHVzZSB0aGUgcmVwZWF0IGxvb3AgdG8gZmlsbCB0aGUgZGF0YSBmcmFtZSB3aXRoIGNvbmNyZXRlIHZhbHVlcyBieSBpbmNyZWFzaW5nIHRoZSBpbmRleCB2YXJpYWJsZSB4IGJ5IDEgZWFjaCB0aW1lIHdlIHJlcGVhdCB0aGUgbG9vcC4gVGhlIGlmIHN0YXRlbWVudCBpbiB0aGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIG9ubHkgdXBkYXRlIHZhbHVlcyBpbiB0aGUgZGF0YSBmcmFtZSB0aGF0IGFjdHVhbGx5IGV4aXN0LiBUaGUgbW9tZW50IHRoYXQgb3VyIGluZGV4IHZhcmlhYmxlIHggYmVjb21lcyBiaWdnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHJvd3MsIHdlIGNhbGwgYnJlYWsgYW5kIGV4aXQgdGhlIHJlcGVhdCBsb29wLgoKCgoKCgoKUmVmZXJlbmNlczoKClsxXSBodHRwczovL2ludHJvMnIuY29tL2xvb3BzLmh0bWwKClsyXSBodHRwOi8vc3VwcG9ydC5rb2RhYmxlLmNvbS9lbi9hcnRpY2xlcy80MTczMzEtd2hhdC1hcmUtbG9vcAoKWzNdIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vci9yX3doaWxlX2xvb3AuYXNwCgpbNF0gaHR0cHM6Ly93d3cuZGF0YW1lbnRvci5pby9yLXByb2dyYW1taW5nL3JlcGVhdC1sb29wLwo=