Werken met R bij wiskunde: Inleiding
Stijlgids
Er is niet één correcte manier om je programma code te schrijven. Maar je kunt zeker een hoop fout (of laten we zeggen, onleesbaar) doen. We eisen niet dat je je aan een vastgelegde stijl houdt, maar we raden je ten zeerste aan om de conventies hieronder in acht te nemen.
Commentaar
Commentaar is een manier om je programmacode leesbaar te maken voor een ander. Maar die ander ben jij zelf ook, als je de code na uren, dagen, weken of maanden weer terugziet.
Teveel commentaar is fout. Te weinig commentaar is ook fout. Maar waar zit de middenweg? Een vuistregel is om de code op te delen in kleine blokken, van elk een paar regels code, en elk blok van een regel commentaar te voorzien.
Één van de volgende twee vragen is meestal zeer relevant om te beantwoorden:
- Wat doet dit blok code?
- Waarom is het op deze manier geïmplementeerd?
Zo leg je uit wat je precies opslaat in de variabele:
# Bereken het gemiddelde
gemiddelde <- som_van_cijfers / aantal_toetsen
Middenin je code schrijf je geen volzinnen, maar om het leesbaar te houden zet je wel netjes een spatie na het #
symbool.
Dus niet zo:
#bereken het gemiddelde
# Bereken het gemiddelde.
Vermijd regels langer dan 79 tekens; zo weet je zeker dat het op een redelijk scherm goed weergegeven kan worden.
Indentatie
Indentatie oftewel inspringing is het toevoegen van witruimte aan het begin van een regel om structuur zichtbaar te maken. Dat is in R niet alleen voor de leesbaarheid: in veel gevallen is het in R verplicht witruimte aan te brengen. Dit moet voor de leesbaarheid en correcte werking van het programma wel consequent gebeuren.
som <- function(x, y) {
resultaat <- x + y
return(resultaat)
}
Gebruik zoals hier minimaal 2 spaties om het onderscheid duidelijk te houden. RStudio heeft een aan R aangepaste editor voor het maken voor RScripts; gebruik de vooringestelde indentatie dan ook.
In R kun je er doorgaans vanuit gaan dat na elke regel eindigend op een accolade ({
), de volgende regel met een extra niveau indentatie moet worden geschreven. Dat geldt voor alle volgende regels die ondergeschikt zijn aan de regel die met een accolade ({
) eindigt.
# onderstaande functie bestaat uit vier instructies
som <- function(vector_van_getallen) {
resultaat <- 0
# onderstaande for-loop bestaat uit één regel die herhaald wordt
for (i in vector_van_getallen) {
resultaat <- resultaat + i
}
return(resultaat)
}
Naamgeving
Veel elementen in je R programma kunnen een naam krijgen, waaronder functies en variabelen.
Functienamen mogen zo lang zijn als je wilt, maar mogen geen spaties of verboden tekens (zoals bijvoorbeeld een vraagteken of een operator zoals een dubbele punt) bevatten en niet beginnen met een cijfer. Over het algemeen begint de naam van een variabele met een kleine letter. Bij samenstelling van een naam uit deelwoorden is het verstandig deze deelwoorden te scheiden met een liggend streepje (underscore). Namen voor variabelen zijn doorgaans wat korter dan functienamen, maar één of twee deelwoorden bevordert de leesbaarheid. Er zijn weinig redenen om namen af te korten; gebruik in dit geval een liggende streepje om deelwoorden te scheiden van elkaar.
Een andere minder flexibele, maar toch veel gebruikte conventie, die niet op een liggend streepje stoelt, is om elk opvolgend deelwoord met een hoofdletter te beginnen (bijvoorbeeld rectificeerSignaal
als functienaam). Wij zullen hiervan in de cursus spaarzaam gebruik maken en bij voorkeur alleen bij functies. R gebruikt in zijn basisomgeving meestal een punt als scheidingssymool voor deelwoorden Gebruik van een liggend streepje is dan een simple mechanisme of naamconflicten te voorkomen en duidelijk onderscheid te maken tussen eigen verzonnen namen en R's interne namen. Bovendien hebben de meeste moderne programmeertalen de conventie van een liggend streepje geadopteerd.
Vanzelfsprekend kun je gebruikelijke symboliek uit de wiskunde overnemen als je een wiskundig probleem aanpakt. De meeste andere probleemdomeinen kennen dergelijke symboliek niet en vereisen langere namen.
ggd <- function{} : # grootste gemene deler
gemiddelde_van_cijfers <- function(V) {} # de naam spreekt voor zich
dx <- 0.001 # een kleine toename
resterend_saldo <- resterend_saldo - 1000 # niets aan toe te voegen
Extra witruimte
Net als bij andere media waar teksten geschreven worden om te lezen, voegen we bij code vaak witruimte toe om de leesbaarheid te vergroten. Indentatie is daar een voorbeeld van, maar het kan op nog een aantal manieren.
Als je code opdeelt in kleine blokken, met bijvoorbeeld een regeltje commentaar erboven, voeg je boven dat commentaar een witregel toe.
Operators zijn zeer compact genaamde functies, zoals +
, ==
, of %
. Code die gebruik maakt van operators is leesbaar te houden door een spatie in te voegen vóór en achter de operator. Dit kun je als vuistregel gebruiken, maar gebruik ook je eigen gezonde inzicht. We geven enkele voorbeelden:
c <- a + b
x <- 2*x - 1
hypot2 <- sqrt(x^2 + y2)
= of <-
Om een variabele een waarde te geven kun je zowel =
als <-
als toewijzingsoperator gebruiken. Er zijn kleine verschillen (bijvoorbeeld in prioriteitsregels), maar wij kiezen voor <- . Een van de redenen is dat een instructie zoals n = n + 1
om met 1 op te hogen verwarrend kan zijn vanuit wiskundig gezichtspunt. Gelijktijdig indrukken van de Alt en - toetsen indrukken geeft je in één keer het pijltie.