2.1 At skrive kode i R
R er et fortolket sprog (eng interpreted language), hvilket betyder, at du skal angive kommandoer for at udføre operationer (eksempelvis beregninger). At programmere eller kode betyder, at man skriver kommandoer. På din anmodning vil R forsøge at udføre disse kommandoer. Dette kapitel giver et overblik over R-sproget. Du lærer, hvordan grundlæggende operationer udføres og fortolkes.
Dataanalyse betyder, at du bruger computerens hukommelse og matematiske funktioner til at lagre data, manipulere data og udføre beregninger. Computere er komplicerede. R er enkelt. Så du lærer kun det grundlæggende i, hvordan R fungerer sammen med din computer. Grundlæggende vil du fortælle R (ved at køre R-kommandoer), at din computer skal udføre operationer. Her er en meget enkel operation, hvor vi beder computeren om at lægge tallene 1+9 sammen.
1+9[1] 10Som du ser ovenfor i outputtet, returnerer R værdien 10 som sit første resultat (angivet med ). Vi gemte ingen information i dette eksempel, men det kunne vi have gjort. Se på det næste eksempel, hvor vi først gemmer tallet 1 i et objekt, der hedder mynumber, og tallet 9 i et objekt, der hedder your_number. Vi bruger den særlige R-operator <- til at tildele tallene til objekterne. Operatoren <- udtales gets. Derefter lægger vi tallene sammen og får samme resultat som ovenfor:
my_number <- 1
your_number <- 9
my_number + your_number[1] 10I det andet eksempel har vi gemt værdien 1 i vores computers hukommelse. Det blev gjort ved at tildele 1 til et R-objekt, som vi navngav my_number. Så my_number er et R-objekt. Du kan tilgå objektet når som helst, fordi det er gemt i computerens hukommelse.
Hvad ville der ske, hvis du multiplicerede dit_nummer med 10? Lad os prøve:
10*your_number[1] 90Resultatet er 90. R har gemt tallet 9 i computerens hukommelse og multiplicerer nu dette tal med 10, hvilket giver 90. Lad os dividere tallene i stedet:
my_number/your_number[1] 0.1111111Du kan faktisk bruge R som lommeregner, som dette eksempel viser:
(100-(10*9))/2[1] 5Lad os prøve et nyt eksempel, hvor vi beder R om at udskrive alle tal mellem 1 og 100. Det gøres ved hjælp af kolon-operatoren (:), som beder R om at skabe en sekvens af heltal fra 1 til 100:
1:100 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100Du vil bemærke, at det første tal på hver linje står i parentes (, , , , , ). Disse tal er blot indikatorer, der fortæller, hvilken værdi linjen begynder med. Så den anden linje begynder med den 18. værdi i serien. Du kan som regel ignorere de tal, der vises i parentes.
2.2 Ufuldstændige kommandoer
Hvis du skriver en ufuldstændig kommando og trykker på Enter, viser R +-prompten på næste linje, hvilket betyder, at R venter på, at du skriver resten af din kommando. Enten afslutter du kommandoen, eller du trykker på Escape for at begynde forfra. I eksemplet nedenfor skriver vi 5- på første linje og trykker på Enter. R viser +-prompten på næste linje, så vi kan angive, hvad vi vil trække fra tallet 5. Vi angiver tallet 1 og trykker på Enter, hvilket giver tallet 4.
> 5 -
+
+ 1
[1] 42.3 Afbryde kommandoer
Nogle R-kommandoer kan tage lang tid at køre. Du kan afbryde en kommando, når den først er gået i gang, ved at trykke på ctrl + c. Bemærk, at det også kan tage R lang tid at afbryde kommandoen.
2.4 Error-meddelelser
Kode, der ikke fungerer, uanset årsagen, returnerer fejl. En fejl betyder blot, at R ikke kan fortolke kommandoen. Fejl skal udbedres ved at rette koden. De fleste fejl skyldes simple stavefejl i programmeringen, men de kan bestemt også være mere komplekse. Fejl indledes med “Fejl i…” efterfulgt af en forklaring, som måske eller måske ikke er til hjælp med at udbedre fejlen. Vi skriver nu en kommando med en stavefejl:
librar(tidyverse)Error in librar(tidyverse) : could not find function "librar"Fejlen skyldes, at vi stavede library forkert som library. Den korrekte kommando er:
library(tidyverse)2.5 At kommentere kode
Det er vigtigt løbende at skrive kommentarer i koden. Næsten alle computersprog lader dig skrive kommentarer ved hjælp af særlige symboler. R bruger hashtag-symbolet (#) til kommentarer. Alt, hvad der følger efter et hashtag på en linje, ignoreres af R. Kommentarer fortolkes altså kun af mennesker, aldrig af computeren.
2.6 Advarsler og meddelelser
- Advarsler: Nogle gange kan din kode returnere en advarsel, hvilket betyder, at kommandoerne blev udført, men at noget kræver din opmærksomhed. Hvis du for eksempel laver et diagram, og nogle værdier mangler, kan du få en advarsel, der siger: Advarsel: Fjernede 13 rækker, der indeholder manglende værdier. Denne advarsel informerer dig altså blot om, at handlingen måske ikke repræsenterer alle observationer i dine data.
- Meddelelser: Meddelelser indeholder harmløs information. Når du for eksempel indlæser en pakke, kan du få en meddelelse med information om pakkeopdateringer, version osv.
2.7 Vektorer (Vectors)
En vektor er en sekvens af dataelementer af samme grundtype. Vektorer er vigtige i R, og der er intet kompliceret ved dem. Her er en vektor, der indeholder tallene 1, 2, 3, 4 og 5. Vi skaber vektoren med funktionen c (), hvor c står for at kombinere.
c(1, 2, 3, 4, 5)[1] 1 2 3 4 5Vi kunne have sparet lidt plads ved at bruge kolon-operatoren (:):
c(1:5)[1] 1 2 3 4 5Og her er en vektor af tegnstrenge.
c("David", "Maria", "Mohamed", "Singh", "Lana")[1] "David" "Maria" "Mohamed" "Singh" "Lana"2.8 Objekter (Objects)
I eksemplerne ovenfor skabte vi vektorer, men vi lagrede dem aldrig i vores computers hukommelse. For at lagre dem skal vi skabe et R-objekt, hvilket vi gør med tildelingsoperatoren <-. Vi skaber nu et objekt, der hedder my_numbers:
my_numbers <- c(1, 2, 3, 4, 5)Vi har nu et R-objekt (my_numbers), som vi kan bruge og manipulere igen. Hvad er et R-objekt? Blot et navn, som du kan bruge til at henvise til lagrede data. Når du bruger objektnavnet i din R-kode, erstatter R objektnavnet med de data, der er lagret i objektet. Se på eksemplet nedenfor, hvor vi lagrer tallet 100 i et objekt, der hedder my_number, og derefter skriver my_number som en kommando og trykker på enter.
my_number <- 100
my_number[1] 1002.8.1 Sådan skaber man objekter i R
For at skabe et R-objekt vælger du et navn og bruger derefter tildelingsoperatoren <- til at sende data til det. Denne kombination ligner en pil, <-. R laver et objekt, der indeholder alt på højre side af operatoren <-. Hvis du vil se, hvad der er lagret i et objekt, skriver du blot objektets navn og trykker på Enter.
2.8.2 Hvor ser jeg mine objekter i R?
Alle objekter vises i ruden Environment i RStudio, som vist i Figur 2.1. Denne rude viser alle de objekter, du har skabt, siden RStudio blev åbnet.

2.8.3 At navngive objekter i R
Du kan navngive et objekt i R næsten, som du vil, men der er nogle regler. For det første kan et navn ikke begynde med et tal. For det andet kan et navn ikke indeholde særlige symboler som ^,! , $, @, +, -,/eller *:
| Tilladt | Ikke tilladt |
|---|---|
| a | 1per |
| b | $ |
| FOO | ^dia |
| my_var | 5th |
| .day | !bad |
| my.object | ?var |
Tilladte og ikke-tilladte navne på objekter i R.
2.9 R skelner mellem store og små bogstaver (case sensitive)
R skelner mellem store og små bogstaver, så income og Income henviser til forskellige objekter. R skelner faktisk altid mellem store og små bogstaver, hvilket betyder, at du i alle henseender, uanset om du henviser til objekter eller bruger funktioner, skal respektere forskellen mellem store og små bogstaver. Hvis du forsøger at bruge funktionen survival () ved at skrive Survival (), får du en fejl.
2.10 R overskriver objekter
Hvis du skaber et objekt og på et senere tidspunkt overskriver informationen i det objekt, beder R ikke om tilladelse. Husk dette, når du skaber og navngiver objekter. Eksemplet nedenfor viser, hvordan vi overskriver objektet my_number:
my_number <- 100
my_number <- 999
my_number[1] 999Du kan bruge funktionen ls () til at udskrive alle objekter, der aktuelt er lagret i dit R-miljø:
ls()[1] "a" "my_number" "my_numbers" "your_number"2.11 Elementvis udførelse (element wise execution)
Lad os skabe en ny vektor, der hedder new_numbers:
new_numbers <- c(1, 2, 3, 4, 5, 6)Vi ser nu, hvad der sker, når vi manipulerer dette objekt på forskellige måder.
new_numbers/2[1] 0.5 1.0 1.5 2.0 2.5 3.0Som I kan se (ovenfor), har R divideret hvert element med 2.
new_numbers-1[1] 0 1 2 3 4 5Som du kan se (ovenfor), har R trukket 1 fra hvert element.
Så når du manipulerer en vektor eller et objekt, udfører R den samme operation for hvert element i vektoren.
Hvis du bruger to eller flere vektorer i en operation, stiller R vektorerne op over for hinanden og udfører en sekvens af enkeltoperationer. Når du for eksempel kører new_numbers * new_numbers, stiller R de to new_numbers-vektorer op over for hinanden og multiplicerer derefter det første element i vektor 1 med det første element i vektor 2. R multiplicerer derefter det andet element i vektor 1 med det andet element i vektor 2 og så videre, indtil hvert element er blevet multipliceret. Resultatet bliver en ny vektor med samme længde som de to første, som vist nedenfor:
new_numbers*new_numbers[1] 1 4 9 16 25 36Hvis du giver R to vektorer med forskellig længde, gentager R den korteste vektor, indtil den er lige så lang som den længste vektor, og udfører derefter beregningen.
a <- c(2)
b <- c(4, 4, 4, 4)
a*b[1] 8 8 8 82.12 Script
Et R-script er blot en tekstfil (med filtypenavnet .R), der indeholder alle de kommandoer, du vil køre. Disse kommandoer står som regel i rækkefølge, hvilket betyder, at linjerne køres én ad gangen. Du vil næsten altid skrive din R-kode i længere scripts. For at oprette et nyt R-script går du til hovedmenuen i RStudio og vælger Filer > Ny fil > R Script. Det åbner en ny tekstfil, som du derefter kan gemme via Filer> Gem som (filtypenavnet er.R). Her er et eksempel på et kort R-script:
my_numbers <- >c(1, 1, 1, 1)
your_numbers <- c(2, 2, 2, 2)
our_numbers <- my_numbers+your_numbers
our_mean <- mean(our_numbers)
## paste() bruges til at sammenkæde tekststrenge</em>
paste("The mean of my numbers is: ", our_mean)[1] "The mean of my numbers is: 3"Du kan køre disse linjer én ad gangen ved at markere hver linje og trykke på knappen Run (eller trykke Ctrl+Retur på Windows og Cmd+Retur på Mac). Du kan også markere alle linjer og køre dem samtidig, når du trykker på knappen Run.
Scripts gør dit arbejde reproducerbart. De gør det muligt for dig at køre din kode igen når som helst og få det samme resultat igen. Du kan også justere/rette din kode og derefter køre den igen. Tænk på situationen, hvor du skal køre hele analysen igen og udelukke mænd fra studiet; det kan gøres ved at justere en linje eller to og derefter køre scriptet igen.