Når man sidder og laver beregninger i R, er det uundgåeligt at man laver fejl i koden. Man kan spare en masse tid, ved at have nogle rutiner, som gør det så nemt som muligt at finde ud af hvor man har lavet fejlen.
Her er først et par gode råd, og dernæst nogle eksempler på fejl som næsten alle laver.
Først et eksempel på hvorfor flere korte linjer måske er nemmere at fejlfinde. I begge kodestumper er opgaven at beregne SEM på en række tal, og afrunde til 3 betydende cifre. Hvor har du lettest ved at finde fejlen?
minVektor <- c(1, 5, 4, 6, 3, 6, 2, 4, 5, 3, 2, 1) #opret en vektor med de tal du skal regne på
s <- sd(minVektor) #beregn spredningen
n <- length(minVektor # beregn antal tal
sem <- s / sqrt(n) #beregn sem
signif(sem, 3) #udskriv sem med 3 betydende cifre
Error in parse(text = input): <text>:4:1: unexpected symbol
3: n <- length(minVektor # beregn antal tal
4: sem
^
eller
minVektor <- c(1, 5, 4, 6, 3, 6, 2, 4, 5, 3, 2, 1) #opret en vektor med de tal du skal regne på
signif(sd(minVektor) / sqrt(length(minVektor), 3)
Error in parse(text = input): <text>:3:0: unexpected end of input
1: minVektor <- c(1, 5, 4, 6, 3, 6, 2, 4, 5, 3, 2, 1) #opret en vektor med de tal du skal regne på
2: signif(sd(minVektor) / sqrt(length(minVektor), 3)
^
Og dernæst et par eksempler på typiske fejl
mitNavn <- Thomas Bendsen
print(mitNavn)
Error in parse(text = input): <text>:1:19: unexpected symbol
1: mitNavn <- Thomas Bendsen
^
Her mangler anførselstegn rundt om tekststrengen (“Thomas Bendsen”). Her er fejlbeskeden ikke helt tydelig, men den giver en idé om hvor fejlen er.
sqrt(y)
Error:
! object 'y' not found
Her prøver man at lave beregninger på en variabel som ikke er defineret (R ved ikke hvad “y” betyder). Fejlbeskeden fra R fortæller præcist hvad der er galt.
x <- c(1, 5, 8, 9, 3, 6)
sqrt(length(x)
Error in parse(text = input): <text>:3:0: unexpected end of input
1: x <- c(1, 5, 8, 9, 3, 6)
2: sqrt(length(x)
^
Her mangler en slutparantes. Fejlbeskeden er næsten klar - linjen slutter uventet, idet R havde forventet yderligere en parantes.