Använda R, en introduktion

Vi skall nu öppna R (eller RStudio), bekanta oss med hur man skriver in och kör kod, och hur man använder script.

Utseende R (programmet)

Utseendet på R ser olika ut beroende på operativsystem, vid uppstart ser man endast en konsol, och man öppnar ett nytt fönster när man öppnar en skriptfil. Figurer hamnar i ytterligare ett fönster.

Utseende RStudio

RStudio är ett alternativt grafiskt interface (GUI) till R. Dess utseende är detsamma oberoende av operativsystem, och dess interface är uppdelat så att olika fönster (script, konsol, grafer osv) alltid ligger på samma plats. Rutan för scripts syns endast om du har öppnat en scriptfil.

Skriv din första kod

Vi skall nu börja interagera med R, och vi gör det till en början interaktivt, det vill säga vi skriver kommandon direkt i konsolen.

Klicka i konsolen, så att din markör hamnar på den nedersta raden, efter > - tecknet. Skriv 1+1 och tryck på Enter. När du trycker på Enter så kör du koden, dvs det du skrivit på raden läses av R, och R genomför ditt kommando. I det här fallet ber du R att addera 1 med 1, och R ger dig svaret på nästa rad, dvs 2.

R är en excellent miniräknare, och eftersom du ser din formel kan du lätt dubbelkolla att du gjorde rätt. Mycket bättre än att använda mobiltelefonens kalkylator.

R kan även med enkelhet hantera potenstal. Testa att skriva följande:

10^2
[1] 100
1.24e-3
[1] 0.00124

Att ta kvadratroten ur ett tal är inga problem:

sqrt(8)
[1] 2.828427

R känner också till matematiska konstanter, som till exempel pi

pi
[1] 3.141593

Objekt i R

R kan spara information i något som kallas objekt. Ett objekt kan innehålla olika typer av information, det kan vara ett tal, en nummerserie, ett namn, ett dataset, resultatet av en statistisk analys, en funktion eller mycket annat. Vi väljer ofta att spara olika resultat som objekt för att kunna återanvända dem, men också för att göra vår kod tydligare.

Vi skall nu göra en övning i att använda objekt. Övningen är väldigt enkel och skulle enkelt kunna genomföras utan att gå vägen via objekt, men den illustrerar väl tankesättet och logiken med objekt.

Låt oss beräkna hur stor del av EUs länder du har besökt. Fundera på hur många det är. Vi skapar sedan ett objekt som vi kallar visited_countries och det objektet skall innehålla ett tal som motsvarar det antal länder du besökt.

visited_countries <- 12

Låt oss titta på formeln. visited_countries är namnet på vårt objekt. Det skall fyllas med innehåll. Du vill fylla det med det antalet EU-länder du besökt. Då skriver du <- vilket är en pil som pekar på objektet. Efter pilen skriver du det antalet länder du besökt, exemelvis 12. Pilen går från talet 12 till vårt objekt, dvs du sparar talet 12 i vårt objekt.

Vill du se vad ett objekt innehåller skriver du objektets namn och trycker på Enter.

visited_countries
[1] 12

För att beräkna andelen av EUs länder du besökt måste vi göra ett objekt som vi kallar total_countries och som innehåller antalet länder som är medlemmar i EU

total_countries <- 27

Nu kan vi beräkna andelen av EUS länder som du besökt, genom att dividera objektet visited_countries med total_countries

visited_countries / total_countries
[1] 0.4444444

Du kanske hellre vill ha det i procent? Modifiera formeln!

visited_countries / total_countries * 100
[1] 44.44444

Du kanske skall använda det här resultatet i framtida beräkningar och vill ha det sparat som ett objekt. Modifiera den senaste formeln så att du sparar resultatet som ett objekt du kallar percent_EUcountries_visited

percent_EUcountries_visited <- visited_countries / total_countries * 100

Undersök vad objektet percent_EUcountries_visited innehåller genom att skriva dess namn och tryck på Enter

percent_EUcountries_visited
[1] 44.44444

Funktioner i R

Tycker du att R visar onödigt många decimaler? Om du använder funktionen round() kan du bestämma hur många decimaler R skall visa. Lås oss uttrycka procentsatsen i objektet percent_EUcountries_visited med en decimal

round(percent_EUcountries_visited, digits = 1)
[1] 44.4

En funktion är en operation som är inbyggd i R. Funktionen har ett namn (i det här fallet round) och följs alltid av en parentes. I parentesen anger du objektet R skall göra något med, samt eventuella andra parametrar som måste anges. Om du använder dig av round() måste du ange hur många decimaler R skall avrunda till , digits = 1. Testa att ändra värdet föra tt få ett annat antal decimaler!

Om du inte vet hur en funktion fungerar kan du alltid nå R’s hjälpfiler genom att skriva ett frågetecken följt av funktionens namn, och trycka Enter. Testa!

?round

Vi testar några funktioner för att få summarisk statistik på ett antal värden, som vi sparar i ett objekt som vi kallar counts

counts <- c(3,6,5,8,4,6,2,4,6,4,5,3,9,10,2,5,7,6)

Lås oss beräkna medelvärdet av counts, det gör vi med funktionen mean()

Code
mean(counts)
[1] 5.277778

Vad är standardavvikelsen? Vi använder funktionen sd()

Code
sd(counts)
[1] 2.244092

Hur många värden har vi i vår variabel counts? Använd funktionen length()

Code
length(counts)
[1] 18

Vad är standardfelet (standard error, SE)? Standard error är standardavvikelsen delat med kvadratroten av antalet mätvärden. Vi har använt alla de funktionerna, så testa att själv skriva en kod för att beräkna standard error. Kör du fast finns koden nedan.

Code
sd(counts) / sqrt(length(counts))
[1] 0.5289375

När vi gör statistik så använder vi hela tiden R´s olika funktioner för att läsa in data, göra grafer, göra statistiska test och ge oss resultaten av testen. Det är alla inbyggda statistiska funktioner som gör R till ett ledande språk för statistiska beräkningar, och ytterligare funktioner finns i de tusentals paket som man kan installera i R.

Använda scriptfiler

Hittils har du interagerat med R interaktivt, det vill säga vi har bett R att göra något, R har gjort det, vi har bett R att göra något nytt, R har gjort det också osv. Det påminner om ett samtal med en annan person.

Nackdelen med att arbeta interaktivt är samma som nackdelen med ett muntligt samtal. Dels är det svårt att minnas vad som sades när vi tänker tillbaka på det senare, och dessutom är det svårt att göra komplicerade uppgifter om man inte börjar skriva ned vad man gör.

Hur gör vi för att minnas vårt samtal med R, vad vi har gjort och vad vi har kommit fram till? Vi använder oss av scriptfiler!

Vad är en scriptfil?

En scriptfil är ett dokument med ändelsen *.R där du dokumenterar de kommandon du ger till R i en logisk ordning. Du kan dessutom lägga till kommentarer till ditt script där du förklarar vad du gjort (det kallas att annotera scriptet).

Eftersom R alltid ger samma svar på dina kommandon (såvida du inte ber R att göra något som involveras slumptal) så räcker det att du dokumenterar de kommandon du ger till R. Sedan kan du köra dina kommandon på nytt, och får då reda på svaret på nytt.

Fördelar med scriptfiler

  • Du dokumenterar vad du gör, och kan återupprepa din analys i framtiden

  • Om du skall göra en ny analys i ett nytt dataset, men med metoder du tidigare använt och dokumenterat i ett script, så kan du kopiera ditt befintliga script och enbart förändra det som behövs för ditt nya data. Du behöver inte börja om från början. Dina gamla script är därmed en guldgruva när du skall analysera nya data.

  • Du kan enklare felsöka kod och utveckla analyser som sker i flera steg

  • Du kan enkelt gå tillbaka och förändra något steg i en analys

För att summera: det finns inga nackdelar med att använda sig av scriptfiler istället för att köra R interaktivt. Enbart fördelar. De enda gångerna jag själv använder R interaktivt är när jag använder R som en miniräknare för vardagsproblem.

Hur ser en scriptfil ut?

Vi börjar med att ladda ner en befintlig scriptfil: testscript.R (högerklicka, välj “spara länk som”) och spara den på lämpligt ställe på din hårddisk. Välj sedan file -> open document i R, eller file -> open file i RStudio. Scriptfilen öppnas nu som ett nytt fönster (i R) eller i den övra vänstra delen av programmet (i RStudio).

Låt oss ta en titt på scriptet

Kommentarer (annoteringar)

Vi ser att den första raden börjar med en hashtag (#).

# Det här är ett testscript där vi tittar på hur ett script fungerar

Innebörden är att raden inte tolkas som kod, utan som en kommentar till din kod. En fil som bara innehåller kod men inga kommentarer är ganska obegriplig, även för dig själv när du återvänder till scriptet några dagar senare. Vi använder kommentarerna för att dokumentera:

  1. Vad vi gör

  2. Varför vi gör det

En väldokumenterad scriptfil (kallas också en väl annoterad scriptfil) är enkel att återvända till för att återupprepa analyserna eller tillämpa dem på nya dataset. Använder man RStudio färgas kommentarerna automatiskt i en avvikande färg.

Kod i scriptfiler

Den första raden som inte börjar med en # är raden som lyder: 1+1

Det är en rad med kod. I vårt script har vi dokumenterat vår fråga till R “vad är 1+1?”. Men vi har ännu inget svar från R. Vi har dokumenterat frågan, men inte ställt frågan än. Vi måste köra den raden i scriptet för att R skall ge oss ett svar.

I princip kan man markera raden, kopiera koden och klistra in i konsolen (ha det som backuplösning om du glömmer bort hur man gör), men det är mycket smidigare att göra följande:

Markera koden du vill köra och:

  • tryck command + Enter (på Mac)

  • tryck ctrl + r (i Windows)

Kör raden med koden 1+1 enligt instruktionen ovan:

Code
1+1
[1] 2

När du kört raden så dyker den upp i konsolen, och på raden under får du svaret från R.

Kör kod i rätt ordning

Den raden kod vi körde innehåller inga objekt, så den kan köras oberoende av andra rader. Men testa att köra raden: studiemedel2025 - studiemedel2024

Får du ett felmeddelande? Error: object 'studiemedel2025' not found

Det betyder att du ber R att göra någonting med ett objekt, men R vet inte vad det är för objekt. Du har dokumenterat skapandet av objektet i ditt script några rader ovanför:

# Skapa objekt med studiemedel för respektive år
studiemedel2024 <- 13156
studiemedel2025 <-13500

Du måste först köra de raderna, så att R vet vad objekten studiemedel2024 och studiemedel2025 innehåller. Sedan kan du köra raden studiemedel2025 - studiemedel2024 på nytt. Då skall det fungera!

# Beräkna höjningen i kronor
studiemedel2025 - studiemedel2024
[1] 344

Skriv ditt första script

Nu skall vi testa att skriva ett eget script! Vi börjar med att skapa en scriptfil genom att klicka oss fram i menyerna:

  • R: välj FIle > New document

  • RStudio: välj File > New file > R Script

Din uppgift är följande: Skapa ett script som räknar ut hur många år en person fyller i år (till exempel hur många år du fyller i år). Använd vårt script om studiemedelshöjningen ovan som inspirationskälla och kommentera scriptet väl.

Försök själv, men kör du fast kan du tjuvkika på en möjlig lösning nedan (under Code).

Code
# Ett skript för att räkna ut hur många år en person fyller

# Ange vilket år det är i år
year_now <- 2026

# Ange när personen är född
year_born <- 1998

# Beräkna hur många år personen fyller i år

year_now - year_born
[1] 28

Glöm inte att spara ditt script med ett passande namn på din hårddisk. I R måste du skriva in filändelsen .R när du sparar scriptet första gången, medan RStudio automatiskt lägger till den filändelsen.