for-loops-r

Programmeertaal R wordt vaak ingezet bij werkzaamheden op het gebied van data-analyse en statistiek. Wanneer je herhaaldelijk dezelfde handelingen vanuit code uit moet voeren, kan het gebruik van for-loops nuttig zijn. In deze blog leer je wat een for-loop is, en hoe je het gebruikt in R.

1. Wat is een for-loop?

Een for-loop is een concept dat in vrijwel alle programmeertalen voorkomt. Je gebruikt het om over een verzameling waarden te itereren.

Dit kun je je voorstellen door te denken aan een lijst met e-mailadressen, waarbij je de lijst doorloopt en bij iedere volgende stap het volgende e-mailadres uitleest. Iedere stap daarbij heet een iteratie, en ieder e-mailadres is een waarde uit de verzameling.

Als we een lijst hebben met 3 e-mailadressen, kun je met een for-loop e-mailadres voor e-mailadres uitlezen en gebruiken, van het eerste tot en met het laatste. Daarmee zou je bijvoorbeeld naar ieder e-mailadres een gepersonaliseerd bericht kunnen sturen.

Met vertrouwen waardevolle inzichten halen uit data met R? Bekijk dan onze opleiding R voor data analyse.

2. R for-loop syntax

Je gebruikt een for-loop in R als volgt:

for (element in verzameling_waarden) {
  print(element)
}
  • Met for bemoem je het gebruik van een for-loop.
  • Tussen ronde haken verwijs je naar de verzameling elementen.
    • verzameling_waarden verwijst naar de variabele waarover je wilt itereren. Daar vul je je eigen variabelenaam in.
    • element verwijst naar een tussentijdse variabele, waarin tijdens iedere iteratie de waarde van een element is bewaard.
    • in is onderdeel van de syntax, dit moet je lezen als: voor elk element in een verzameling.
  • Tussen accolades geef je de code op die tijdens iedere iteratie moet worden uitgevoerd. In dit voorbeeld printen we slechts als voorbeeld de waarde van het element. Je kunt tussen de accolades alle logica toevoegen die nodig is.

Een for-loop kan wat abstract overkomen. Bekijk daarom de volgende animatie eens goed. Daarin zie je stap voor stap wat er gebeurt.

r_for_loop

3. Toepassen van een for-loop op verschillende soorten data

Nu we weten wat een for-loop is, en wat de syntax is in R, kijken we naar enkele toepassingen.

3.1. Reeks getallen

Hieronder zie je hoe je over een reeks getallen kunt itereren. Hier voor de getallen 1 t/m 3:

for (number in 1:3) {
  print(number)
}
Output:
[1] 1
[1] 2
[1] 3

Let op dat we hier de tussentijdse variabele die de waarde tijdens iedere iteratie bevat "number" noemen. Deze naam kiezen we zelf.

3.2. List of vector

Eerder bekeken we al het voorbeeld van een lijst met e-mailadressen. Hieronder zien we dit voorbeeld met het gebruik van een vector:

email_addresses <- c("john@example.com", "paul@example.com", "george@example.com")

for (email_address in email_addresses) {
  print(email_address)
}
Output:
[1] "john@example.com"
[1] "paul@example.com"
[1] "george@example.com"

3.3. Dataframe

Ook over een dataframe (tabel) kunnen we met een for-loop itereren. Dit kan zowel over kolommen, als over rijen.

In onderstaand voorbeeld maken we een dataframe aan met 3 kolommen, en berekenen we met een for-loop het gemiddelde van de waarden in elke kolom.

df <- data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))

for (column_number in 1:ncol(df)) {
  column_mean <- mean(df[, column_number])
  print(column_mean)
}
Output:
[1] 2
[1] 5
[1] 8

Hier zie je goed dat je binnen de accolades je eigen logica kunt toepassen.

4. Specifieke toepassingen

Nu we met for-loops in R hebben leren werken, kijken we naar enkele specifieke toepassingen.

4.1. If-else-statement in for-loop

Met een if-else-statement kan afzonderlijke code voor specifieke gevallen worden uitgevoerd. In onderstaand voorbeeld:

  • Maken we een lijst met getallen.
  • Itereren over de waarden met een for-loop.
  • Passen daarbij een if-else-statement toe, en printen afhankelijk van de waarde een tekst.
numbers <- c(2, 12, 10, -5)

for (number in numbers) {
  if (number >= 10) {
    print(paste(number , "is greater than or equal to 10"))
  } else {
    print(paste(number , "is less than 10"))
  }
}
Output:
[1] "2 is less than 10"
[1] "12 is greater than or equal to 10"
[1] "10 is greater than or equal to 10"
[1] "-5 is less than 10"

4.2. Geneste for-loops

Binnen een for-loop kun je ook weer andere for-loops toepassen. Je spreekt dan over "nested"-for-loops.

In onderstaand voorbeeld itereren we over een lijst met namen. Tijdens iedere iteratie itereren we met een andere for-loop over de letters in de naam.

names <- c("John", "Paul")

for (name in names) {
  print(paste("Name:", name))

  for (i in 1:nchar(name)) {
    letter <- substring(names, i, i)
    print(paste("Letter:", letter))
  }

  print("---")
}
Output:
[1] "Name: John"
[1] "Letter: J" "Letter: P"
[1] "Letter: o" "Letter: a"
[1] "Letter: h" "Letter: u"
[1] "Letter: n" "Letter: l"
[1] "---"
[1] "Name: Paul"
[1] "Letter: J" "Letter: P"
[1] "Letter: o" "Letter: a"
[1] "Letter: h" "Letter: u"
[1] "Letter: n" "Letter: l"
[1] "---"

4.3. Stopzetten van een for-loop

Met behulp van het break commando kun je een for-loop stoppen. In onderstaand voorbeeld gebruiken we een if-else-statement en het break commando om de loop te stoppen zodra een waarde gelijk aan 0 is gevonden.

numbers <- c(2, 12, 0, 10, -5)

for (number in numbers) {
  if (number == 0) {
    break
  }
  print(number)
}
Output:
[1] 2
[1] 12

Je ziet in de output dat waarden tot aan het eerste element met waarde 0 worden geprint.

4.4. Stappen overslaan in een for-loop

Met het next commando kun je iteraties overslaan. In onderstaand voorbeeld gebruiken we een if-else-statement en het next commando een stap over te slaan, als een waarde gelijk is aan 0.

numbers <- c(2, 12, 0, 10, -5)

for (number in numbers) {
  if (number == 0) {
    next
  }
  print(number)
}
Output:
[1] 2
[1] 12
[1] 10
[1] -5

Je ziet waarden van alle elementen worden geprint, behalve wanneer de waarde gelijk is aan 0.

Om te onthouden

We hebben gezien dat met een for-loop over elementen in een verzameling geïtereerd kan worden. Met de juiste syntax kan dit in R gemakkelijk worden toegepast op verschillende soorten data. Daarbij kun je logica toepassen op ieder element. We hebben daarbij gezien dat bijvoorbeeld een if-else-statement kan worden toegepast, en dat je gebruik kunt maken van loops binnen loops.

Wil jij goed leren werken in R? Tijdens onze Opleiding R leer je alles wat je nodig hebt om zelfstandig analyses uit te voeren in R.

by: