Inleiding Programmeren + R

Voorwaardelijke opdrachten

» Start

Voorwaardelijke opdrachten


if...


We gebruiken selectie door middel van logische operatoren [zie: logica] om bepaalde opdrachten soms wel en soms niet uit te voeren. Een voorbeeld: 


ALS het regent DAN neem een paraplu mee. 


In R gebruiken we de functie if om voorwaardelijk opdrachten te kunnen formuleren. 


Na de if komt de voorwaarde, vervolgens komen de opdrachten die uitgevoerd moet worden als de voorwaarde waar is. Als de voorwaarde niet waar is wordt die opdrachten  overgeslagen en gaat het programma verder met de volgende opdrachten (of stopt als die er niet meer zijn).

if(x>10) {

opdracht 1

opdracht 2

opdracht 3

} # sluit if commando af

opdracht 4

Bijvoorbeeld:

# Dit is een eenvoudig if voorbeeld

A <- 2

B <- 3

if (A < B) {

print  'A is kleiner dan B'

}

C <- A * B

Kopieer en plak de bovenstaande regels in een tekstfile (Notepad, of Textwrangler), en bewaar die file met naam test-if.r in de working directory van R.


# daarna lezen we het script in

> source("test-if.r")


Als we het algoritme zo uitvoeren zal de tekst 'A is kleiner dan B' altijd op het scherm verschijnen. Veranderen we de eerste regel echter in

A <- 10

dan zal er niets op het scherm geschreven worden. De laatste regel wordt wel uitgevoerd. C wordt dus in beide gevallen het produkt van A en B.


if...  else


We kunnen de bovenstaande if... constructie uitbreiden met de else. Na het else-statement komen de opdrachten die uitgevoerd moeten worden als die na de if-statement niet uitgevoerd moeten worden. 

Het algoritme uit de vorige paragraaf kunnen we nu op de volgende manier uitbreiden:


# Dit is een eenvoudig if  ... else voorbeeld}

A <- 2

B <- 3

if (A < B) {

cat("A is kleiner dan B \n")

} else {

cat("A is groter dan B \n")

}

C <- A * B


Bij dit algoritme wordt dus altijd iets op het scherm geschreven (dus ook als A de waarde 10 heeft). 


Merk op dat in het geval van A=3 (dus A is gelijk aan B) er een logische fout in dit programma zit.


We kunnen de if...else constructie net zo vaak gebruiken als we willen. We kunnen zelfs een selectie binnen een selectie maken. Kijk bijvoorbeeld naar het volgende algoritme:


# Dit is een eenvoudig if ... else voorbeeld met nesting

A <- 2

B <- 3

C <- 0

if (A < B) {

cat("A is kleiner dan B \n")

} else {

if (A < C) {

cat( 'A is kleiner dan C\n')

} else {

cat( 'A is groter dan C\n')

}

}

C <- A * B


Als A kleiner is dan B dan wordt eerst op het scherm geschreven: A is kleiner dan B. Daarna wordt gekeken of A kleiner is dan C. Dit is niet het geval en er wordt dus niets meer op het scherm geschreven. Daarna wordt het produkt van A en B toegekend aan C.


Zo kunnen we de logische fout uit het eerste voorbeeld van deze paragraaf verbeteren door het algoritme als volgt uit te breiden:

# Dit is een eenvoudig if ... else voorbeeld met nesting

A <- 2

B <- 3

if (A < B) {

cat("A is kleiner dan B \n")

} else {

if (A == B) {

cat( 'A is gelijk aan B\n')

} else {

cat( 'A is groter dan B\n')

}

}

C <- A * B

cat("C is gelijk aan ", C)

Je ziet dat we door middel van inspringen duidelijk maken welke opdrachten bij welke conditie horen. Inspringen is een tekstueel hulpmiddel; geen eis met betrekking tot de correctheid van het algoritme ! 


Ook wanneer de if... alleen voldoende lijkt om je probleem op te lossen, is het verstandig om je door het toevoegen van een ...else in te dekken tegen onverwachte uitzonderingen. Dat gaat er dan zo uitzien:

if (voorwaarde) {

opdracht

}else {

cat('Hier had ik niet op gerekend')

}