2.1 Å skrive kode i R
R er et tolket språk (eng interpreted language), noe som betyr at du må angi kommandoer for å utføre operasjoner (for eksempel beregninger). Å programmere eller kode innebærer at man skriver kommandoer. På din forespørsel vil R forsøke å utføre disse kommandoene. Dette kapitlet gir en oversikt over R-språket. Du lærer hvordan grunnleggende operasjoner utføres og tolkes.
Dataanalyse innebærer at du bruker datamaskinens minne og matematiske funksjoner til å lagre data, manipulere data og utføre beregninger. Datamaskiner er kompliserte. R er enkelt. Så du lærer bare det grunnleggende om hvordan R fungerer sammen med datamaskinen din. I bunn og grunn kommer du til å fortelle R (ved å kjøre R-kommandoer) hvordan datamaskinen din skal utføre operasjoner. Her er en svært enkel operasjon, der vi ber datamaskinen om å legge sammen tallene 1+9.
1+9[1] 10Som du ser i utdataene ovenfor, returnerer R verdien 10 som sitt første resultat (angitt med ). Vi lagret ingen informasjon i dette eksemplet, men det kunne vi ha gjort. Se på neste eksempel, der vi først lagrer tallet 1 i et objekt som heter mynumber og tallet 9 i et objekt som heter your_number. Vi bruker den spesielle R-operatoren <- for å tilordne tallene til objektene. <-operatoren uttales gets. Deretter legger vi sammen disse tallene og får samme resultat som ovenfor:
my_number <- 1
your_number <- 9
my_number + your_number[1] 10I det andre eksemplet har vi lagret verdien 1 i datamaskinens minne. Dette ble gjort ved å tilordne 1 til et R-objekt, som vi ga navnet my_number. Så my_number er et R-objekt. Du kan få tilgang til objektet når som helst, fordi det er lagret i datamaskinens minne.
Hva ville skje om du multipliserte din_nummer med 10? La oss prøve:
10*your_number[1] 90Resultatet er 90. R har lagret tallet 9 i datamaskinens minne og multipliserer nå dette tallet med 10, noe som gir 90. La oss dele tallene i stedet:
my_number/your_number[1] 0.1111111Du kan faktisk bruke R som en kalkulator, slik dette eksemplet viser:
(100-(10*9))/2[1] 5La oss prøve et nytt eksempel der vi ber R skrive ut alle tall mellom 1 og 100. Dette gjøres ved hjelp av kolonoperatoren (:), som ber R lage en sekvens av heltall 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 legge merke til at det første tallet på hver linje står i klammer (, , , , , ). Disse tallene er bare indikatorer som forteller hvilken verdi linjen begynner med. Så den andre linjen begynner med den 18. verdien i serien. Du kan som regel se bort fra tallene som vises i klammer.
2.2 Ufullstendige kommandoer
Hvis du skriver en ufullstendig kommando og trykker Enter, vil R vise +-ledeteksten på neste linje, noe som betyr at R venter på at du skal skrive resten av kommandoen. Enten fullfører du kommandoen, eller du trykker Escape for å begynne på nytt. I eksemplet nedenfor skriver vi 5- på første linje og trykker Enter. R viser +-ledeteksten på neste linje, slik at vi kan oppgi hva vi vil trekke fra tallet 5. Vi oppgir tallet 1 og trykker Enter, noe som gir tallet 4.
> 5 -
+
+ 1
[1] 42.3 Avbryte kommandoer
Noen R-kommandoer kan ta lang tid å kjøre. Du kan avbryte en kommando etter at den har startet ved å trykke ctrl + c. Merk at det også kan ta R lang tid å avbryte kommandoen.
2.4 Feilmeldinger (error)
Kode som ikke fungerer, uansett årsak, vil returnere feil. En feil betyr ganske enkelt at R ikke kan tolke kommandoen. Feil må rettes ved å korrigere koden. De fleste feil skyldes enkle skrivefeil i programmeringen, men de kan selvsagt også være mer komplekse. Feil innledes med “Feil i…” etterfulgt av en forklaring som kanskje, eller kanskje ikke, er til hjelp for å rette feilen. Vi skriver nå inn en kommando med en skrivefeil:
librar(tidyverse)Error in librar(tidyverse) : could not find function "librar"Feilen skyldes at vi stavet library feil som library. Riktig kommando er:
library(tidyverse)2.5 Å kommentere kode
Det er viktig å skrive kommentarer fortløpende i koden. Nesten alle programmeringsspråk lar deg skrive kommentarer ved hjelp av spesielle symboler. R bruker hashtag-symbolet (#) for kommentarer. Alt som følger etter en hashtag på en linje, ignoreres av R. Kommentarer tolkes altså bare av mennesker, aldri av datamaskinen.
2.6 Advarsler og meldinger
- Advarsler: Noen ganger kan koden din returnere en advarsel, noe som betyr at kommandoene ble utført, men at noe trenger din oppmerksomhet. Hvis du for eksempel lager et diagram og noen verdier mangler, kan du få en advarsel som sier: Advarsel: Fjernet 13 rader som inneholder manglende verdier. Denne advarselen informerer deg altså ganske enkelt om at resultatet kanskje ikke representerer alle observasjonene i dataene dine.
- Meldinger: Meldinger inneholder ufarlig informasjon. Når du for eksempel laster inn en pakke, kan du få en melding med informasjon om pakkeoppdateringer, versjon osv.
2.7 Vektorer (Vectors)
En vektor er en sekvens av dataelementer av samme grunntype. Vektorer er viktige i R, og det er ingenting komplisert med dem. Her er en vektor som inneholder tallene 1, 2, 3, 4 og 5. Vi lager vektoren med funksjonen c (), der c står for å kombinere (combine).
c(1, 2, 3, 4, 5)[1] 1 2 3 4 5Vi kunne ha spart litt plass ved å bruke kolonoperatoren (:):
c(1:5)[1] 1 2 3 4 5Og her er en vektor av tegnstrenger.
c("David", "Maria", "Mohamed", "Singh", "Lana")[1] "David" "Maria" "Mohamed" "Singh" "Lana"2.8 Objekter (Objects)
I eksemplene ovenfor laget vi vektorer, men vi lagret dem aldri i datamaskinens minne. For å lagre dem må vi lage et R-objekt, noe vi gjør med tilordningsoperatoren <-. Vi lager nå et objekt som heter my_numbers:
my_numbers <- c(1, 2, 3, 4, 5)Vi har nå et R-objekt (my_numbers) som vi kan bruke og manipulere igjen. Hva er et R-objekt? Bare et navn du kan bruke for å henvise til lagrede data. Når du bruker objektnavnet i R-koden din, erstatter R objektnavnet med dataene som er lagret i objektet. Se på eksemplet nedenfor, der vi lagrer tallet 100 i et objekt som heter my_number, og deretter skriver vi my_number som en kommando og trykker Enter.
my_number <- 100
my_number[1] 1002.8.1 Hvordan man lager objekter i R
For å lage et R-objekt velger du et navn og bruker deretter tilordningsoperatoren <- for å sende data til det. Denne kombinasjonen ser ut som en pil, <-. R lager et objekt som inneholder alt på høyre side av <- operatoren. Hvis du vil se hva som er lagret i et objekt, skriver du ganske enkelt navnet på objektet og trykker Enter.
2.8.2 Hvor ser jeg objektene mine i R?
Alle objekter vises i ruten Environment i RStudio, som vist i Figur 2.1. Denne ruten viser alle objekter du har laget siden RStudio ble åpnet.

2.8.3 Å navngi objekter i R
Du kan gi et objekt i R nesten hvilket navn du vil, men det finnes noen regler. For det første kan et navn ikke begynne med et tall. For det andre kan et navn ikke inneholde noen spesielle symboler, som ^,! , $, @, +, -,/eller *:
| Tillatt | Ikke tillatt |
|---|---|
| a | 1per |
| b | $ |
| FOO | ^dia |
| my_var | 5th |
| .day | !bad |
| my.object | ?var |
Tillatte og ikke-tillatte navn på objekter i R.
2.9 R skiller mellom store og små bokstaver (case sensitive)
R skiller mellom store og små bokstaver, så income og Income vil henvise til ulike objekter. R skiller faktisk alltid mellom store og små bokstaver, noe som betyr at du i alle sammenhenger (enten du henviser til objekter eller bruker funksjoner) må ta hensyn til dette. Hvis du prøver å bruke funksjonen survival () ved å skrive Survival (), vil du få en feil.
2.10 R overskriver objekter
Hvis du lager et objekt og på et senere tidspunkt overskriver informasjonen i dette objektet, vil R ikke be om tillatelse. Husk dette når du lager og navngir objekter. Eksemplet nedenfor viser hvordan vi overskriver objektet my_number:
my_number <- 100
my_number <- 999
my_number[1] 999Du kan bruke funksjonen ls () for å skrive ut alle objekter som for øyeblikket er lagret i R-miljøet ditt:
ls()[1] "a" "my_number" "my_numbers" "your_number"2.11 Elementvis utførelse (element wise execution)
La oss lage en ny vektor som heter new_numbers:
new_numbers <- c(1, 2, 3, 4, 5, 6)Vi skal nå se hva som skjer når vi manipulerer dette objektet på ulike måter.
new_numbers/2[1] 0.5 1.0 1.5 2.0 2.5 3.0Som dere ser (ovenfor), har R delt hvert element på 2.
new_numbers-1[1] 0 1 2 3 4 5Som du ser (ovenfor), har R trukket 1 fra hvert element.
Så når du manipulerer en vektor eller et objekt, utfører R den samme operasjonen for hvert element i vektoren.
Hvis du bruker to eller flere vektorer i en operasjon, stiller R opp vektorene og utfører en sekvens av enkeltoperasjoner. Når du for eksempel kjører new_numbers * new_numbers, stiller R opp de to new_numbers-vektorene og multipliserer deretter det første elementet i vektor 1 med det første elementet i vektor 2. R multipliserer så det andre elementet i vektor 1 med det andre elementet i vektor 2, og så videre, til hvert element er multiplisert. Resultatet blir en ny vektor med samme lengde som de to første, som vist nedenfor:
new_numbers*new_numbers[1] 1 4 9 16 25 36Hvis du gir R to vektorer med ulik lengde, vil R gjenta den korteste vektoren til den er like lang som den lengste vektoren, og deretter utføre beregningen.
a <- c(2)
b <- c(4, 4, 4, 4)
a*b[1] 8 8 8 82.12 Skript
Et R-skript er ganske enkelt en tekstfil (med filendelsen .R) som inneholder alle kommandoene du vil kjøre. Disse kommandoene står vanligvis i rekkefølge, noe som betyr at linjene kjøres én om gangen. Du kommer nesten alltid til å skrive R-koden din i lengre skript. For å lage et nytt R-skript går du til hovedmenyen i RStudio og velger Filer > Ny fil > R Script. Dette åpner en ny tekstfil som du deretter kan lagre via Filer> Lagre som (filendelsen er.R). Her er et eksempel på et kort R-skript:
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() brukes til å slå sammen tekststrenger</em>
paste("The mean of my numbers is: ", our_mean)[1] "The mean of my numbers is: 3"Du kan kjøre disse linjene én om gangen ved å markere hver linje og trykke på knappen Run (eller trykke Ctrl+Retur på Windows og Cmd+Retur på Mac). Du kan også markere alle linjene og kjøre dem samtidig når du trykker på knappen Run.
Skript gjør arbeidet ditt reproduserbart. De gjør det mulig for deg å kjøre koden din på nytt når som helst og få det samme resultatet igjen. Du kan også justere eller korrigere koden og deretter kjøre den på nytt. Tenk deg situasjonen der du må kjøre hele analysen på nytt og ekskludere menn fra studien; dette kan gjøres ved å justere en linje eller to og deretter kjøre skriptet på nytt.