# 1
<- read.csv("my_data_file.csv")
d
# 2
<- d %>% filter(id != "241269-1212")
d
# 3
<- d %>%
d mutate(s=factor(c("M", "F"))[as.numeric(substr(id,nchar(id),nchar(id))) %% 2])
Comments - what to
1 Kommentarer der giver mening
Hvilke kommentarer ville være relevante her?
Kom med forslag til kommentarer til denne kode … tænk ‘hvad’ og ‘hvorfor’
Forslag til meningsfyldte kommentarer
# ?? comments necessary ??
<- read.csv("my_data_file.csv")
d
# excluded as participant entered an invalid CPR number
<- d %>% filter(id != "2321369-1212")
d
# set 's' to F(emale) or M(ale) depending on odd/even id number in CPR
<- d %>%
d mutate(s=factor(c("F", "M"))[as.numeric(substr(id,nchar(id),nchar(id))) %% 2 + 1 ])
I forhold til de tre linjer kode i øvelsen herover:
- unødvendigt med en kommentar til den første linje – koden er selv-forklarende
- en god ide med en kommentar til anden linje der forklarer hvorfor man sletter det pågældende CPR nummer
- en god iden med en kommentar til tredje linje derforklarer hvad koden gør for det er ikke indlysende!
Kode linje 3 er lidt kompliceret (med vilje) men kort fortalt: Den beregner en ny variable s
som enten er ‘M’ eller ‘F’ for hhv ulige og lige CPR numre. Hvis du gerne vil forstå kode:
Hvis
id
er en tekst-string for et CPR nummer, kigger koden to det sidste tegn (substr(id,nchar(id),nchar(id))
), konverterer det til en talværdi (as.numeric
) og beregner modulus 2 (%% 2
), altså heltals-resten ved division med to (som bliver0
for lige tal og1
for ulige tal), så lægger den 1 til (+1
) og bruger tallet (som altså nu er1
for CPR numre med lige tal og2
for CPR numre med ulige tal), og sætters
til index 1 eller 2 af faktorenfactor(c("F", "M"))
– det fungerer fint, men det var ikke selv-indlysende, vel?.
1.1 Kommentér din kode
Hovedpointer
- Altid føj kommentarer til din kode
- Kommentarer skulle forklare ‘hvorfor’ (dit rationale)
- Med god kode, bliver ‘hvordan’ selv-indlysende
- ..men hvis din kode ikke kan være selv-indlysende: så forklar hvordan den fungerer i kommentarer