R programmering – en begynderguide

I denne artikel vil jeg introducere dig til programmeringssproget R, der blandt andet anvendes en del til statistiske beregninger. Her er en introduktion til R.
R er et programmeringssprog, der i den senere tid er blevet en del populær. Det er ikke et programmeringssprog, du kan bruge til at lave programmer eller hjemmesider med, men derimod et sprog som kan bruges til at lave statistiske beregninger eller grafiske modeller med. Det er derfor også et sprog der er meget populær i forskerverdenen.
Selve navnet “R” er opkaldt efter de to personer der opfandt R. Det er Ross Ihaka og Robert Gentleman fra University of Auckland i New Zealand. De startede udvikling af R i 1992, og fik den første version af sproget udgivet i 1995. Det er et sprog der baserer sig på et andet statistisk programmeringssprog der hedder S, og det er også en af årsagerne til at navnet på “R” er et bogstav.

Hvorfor skal jeg lære R?

R er altså meget anvendeligt, hvis du skal lave en del statistik, for eksempel i forbindelse med et forskningsforsøg. R giver nemlig en lang række statistiske muligheder, såsom lineær og nonlineær modelling, klassiske statistiske tests, tidsserieanalyser og cluster-analyser.
En af R’s styrker er at det er nemt at producere høj kvalitets-grafer, der også kan bruges til videnskabelige artikler. Det vil jeg også komme mere ind på senere.

Hvad kræver det for at kunne udvikle i R?

R er open source og fuldstændig gratis. Det er udgivet under en GNU General Public licens og kan anvendes både i Windows, Mac og Linux.
Når du skal downloade R, skal du downloade det via noget der hedder CRAN. Det står for The Comprehensive R Archive Network og det er altså steder hvor du kan downloade R og alt der har noget med R at gøre. Du kan finde et sted at downloade R fra, som ligger i nærheden af Danmark på r-project.org. Her finder du en liste af “mirrors”, der egentlig blot er forskellige steder du kan downloade R fra. Uanset hvilken du vælger, får du det samme.
Når du har fundet en mirror, der ligger i nærheden af Danmark – f.eks. denne her – kan du vælge hvilket operativsystem du vil udvikle R i og downloade denne. Så vælger du blot den nyeste version. På nuværende tidspunkt er R 3.4.1 for eksempel den nyeste version af R der er frigivet.
Når du har downloadet og installeret R, har du i princippet alt du skal bruge for at komme igang. Men jeg kan også anbefale du installerer RStudio, hvilket er en såkaldt IDE eller udviklingsmiljø til R og vil gøre det lettere for dig at udvikle R. Blandt andet highlighter den R kode og færdiggør nogle kommandoer for dig.
RStudio findes i flere versioner, og du kan bare vælge den gratis version af RStudio Desktop, der indeholder det du skal bruge. Når du har installeret både R og RStudio er du klar til at komme igang med at udvikle R projekter. Starter du RStudio op nu, vil det typisk se således ud:

Bemærk her terminalen til venstre ud for “>” tegnet, som indikerer at her starter en ny kommando. Som udgangspunkt skal du kommunikere med R sproget via kommandoer i denne terminal, og det kan du gøre herfra. Det kan være anvendeligt at kende nogle genveje i RStudio:

  • Tab – hvis du indtaster noget i RStudio og trykker på Tab kommer der en liste med kommandoer, som du kunne være igang med at indtaste.
  • Ctrl+Pil op – kan du også bruge til at færdiggøre kommandoer du er igang med.
  • Ctrl+Enter – sender den kommando du er igang med og kører den.

R er et dynamisk programmeringssprog der IKKE skal kompileres som så mange andre programmeringssprog. Du skal altså ikke køre det igennem en compiler inden du får resultatet.

R Syntax

R har selvfølgelig som alle de andre programmeringssprog nogle forskellige regler for hvordan R kode er bygget op og hvordan ting skal navngives. Her vil jeg blot nævne nogle af dem.
For det første er det vigtigt at huske på, at navne i R kan være bogstaver fra a-z (store og små), tal og tegnene “.” og “_”. Du kan ikke bruge æ, ø, å, mellemrum eller bindestreg i R. Et navn kan ikke starte med et tal, men skal starte med et bogstav eller et gyldigt tegn. Bemærk også at R er case-sensitiv, dvs. der er forskelle på små og store bogstaver.
Dette gælder også for de filer du skal indlæse i R og de mappenavne de ligger i. Så sørg for at din arbejdsmappe opfylder disse regler også.

Kommentarer

R har også muligheder for at skrive kommentarer i koden. Her anvendes # tegnet. Du kan derfor skrive:

# Her er en kommentar

Hvilket ikke vil returnere noget, fordi det bare er en kommentar.

Variabler i R

Som I alle programmeringssprog anvender R også variabler. I mange andre programmeringssprog, vil du måske se at du bruger = til at assigne en variabel. I R bruges <- som assign operator i stedet.

a <- KOMMANDO

Hvilket altså så vil assigne resultatet af kommandoen KOMMANDO til variablen a.
Det er også anvendeligt at kende de forskellige datatyper i R. Her findes:

  • logical der er en boolean som kan være TRUE eller FALSE.
  • integer der er et heltal
  • double der er et decimaltal
  • character der er tekst
  • factor der er en liste af foruddefinerede kategorier
  • vektor er en liste med elementer af samme datatype
  • list er en liste med elementer af samme datatype og tilhørende navn til hvert element
  • dataframe er en tabel eller et datasæt med værdier

I øverste højre hjørne af RStudio kan du altid se de variabler du har anvendt.

Det kan du også gøre med denne kommando:

ls()

Når du er færdig med at bruge en variabel kan du tømme den for data med

rm(a)

Dette er en god ide, for generelt at spare hukommelse som kræves for at køre dine programmer.

Almindelige regnestykker i R

R er også en almindelig regnemaskine, og du kan derfor indtaste regnestykker direkte i R. F.eks. vil du få svaret 4, hvis du i konsollen skriver 2+2 og trykker på Enter. Ligesom du kender i Excel så betyder “+” plus, “-” minus, “*” gange og “/” dividere.
Hvis du nu har gemt et tal i en variabel a og en variabel b, så kan du også lægge dem sammen ved at skrive a+b.

a<-2
b<-3
a+b

Dette ville give svaret 5, fordi 2+3 er 5. Hvis du vil regne kvadratroden af et tal kan du også det:

sqrt(a)

Eller måske e opløftet i noget:

exp(b)

Endelig kan du jo også sagtens vælge at gemme resultatet i en ny variabel:

c<-a+b

Hvis du vil se indholdet af en variabel skriver du bare variablens navn:

c

Sekvenser

I R kan du skrive en sekvens af tal med “:”. For eksempel vil følgende liste tallene fra 1 til 10.

1:10

Bemærk at hvis du skriver 100:140, så vil resultatet blive vist i flere linjer.

[1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
[17] 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
[33] 132 133 134 135 136 137 138 139 140

Her kan du se at resultatet vil R dele op over flere linier og inden for [ og ] i starten er angivet nummeret på det element der kommer først på den linie.

Vektorer

En vektor opretter du med koden c.

c(1,3,6,4,2)

Dette er altså en vektor med 5 værdier og du får fat i den 3. værdi med koden:

c[3]

Bemærk at dette er anderledes i forhold til arrays i andre programmeringssprog, hvor indexet ofte begynder med 0. I R begynder indexet med 1.
 

Lister

En liste er altså en slags vektor, hvor hvert element har et navn. Denne oprettes ved koden:

liste<-list(a=1,b="hej",c=3)

Det der står før “=” er altså navnet på elementet og det der står efter er værdien. For at hente værdien af elementet med navnet b skriver du:

liste$b

Hvilket så gerne skulle returnere “hej”. Hvis du skriver:

liste["a"]

Får du en ny delliste der kun indeholder a=1. Hvis du bare vil se hvad listen indeholder skriver du:

liste[]

Dataframes eller datasæt

Et datasæt er jo en tabel med data. Kilden til disse kan stamme mange steder fra (se længere nede hvordan et datasæt indlæses). Men klassisk består et datasæt af en række kolonner med hver sin overskrift og herunder så en lang række rækker med data. Hvis du har indlæst et datasæt så kan du også arbejde med disse. Hvis du for eksempel har indlæst et datasæt med navnet “ds” skriver du følgende for at få hele tabellen med data at se:

ds

Men du kan også trække enkelte data ud. For eksempel kan du med følgende kommando finde den værdi der står på række 3 og kolonne 2.

ds[3,2]

Bemærk her at rækkenummeret skrives først og herefter kolonnenummeret. Hvis jeg nu vil have hele række 3 at se skriver jeg:

ds[3,]

Og vil jeg have hele kolonne 2 at se skriver jeg:

ds[,2]

Endelig kan jeg få hele kolonnen hvor overskriften er “Navn” at se med kommandoen

ds$Navne

Bemærk at her kan du også indtaste sekvenser. For at få vist de første 5 rækker af datasættet skriver du:

ds[1:5,]

Og hvis du vil se de første 5 værdier af kolonne 2 skriver du:

ds[1:5,2]

Statistiske beregninger

Du kan også beregne middelværdien af alle værdier i kolonne 3 med kommandoen:

m<-mean(ds[,3])

Bemærk at dette gemmer resultatet i variablen m. Du kan også beregne standardafvigelsen med kommandoen sd:

s<-sd(ds[3])

Hvis du vil beregne konfidensintervallet omkring en middelværdien af kolonne 3 skriver du:

t.test(ds[3])

Et 99% konfidensinterval beregnes med:

t.test(ds[3],conf.level=0.99)

Hjælpekommandoer i R

Her er der nogle forskellige anvendelige hjælpekommandoer, som du kan få brug for i R.

Skift arbejdsmappe

Jeg arbejder med R på en Mac og her er standardmappen hvor kommandoer køres fra mit Home directory. Hvis jeg vil skifte til en anden arbejdsmappe, kan jeg bruge følgende kommando og trykke enter:

setwd("~/RMappe")

Dette bringer dig et mappeniveau dybere ind i den mappe der hedder “Rmappe”. Dette er altså måden du relativt angiver den mappe du skal arbejde i. Du kan også absolut angive hvor du skal arbejde henne med kommandoen:

setwd("/Users/andreas/Documents/RMappe")

Hvor du her indtaster hele stien til den mappe du vil gemme R filer i. Hvis du bruger RStudio kunne du også have valgt “Session” i menuen, herefter “Set Working Directory” og så “Choose Directory”.

Installer og brug R pakker

Der findes mange pakker til R som du kan installere og bruge, hvis du skal bruge ny funktionalitet til R. Disse pakker downloades også fra CRAN og installeres så med en kommando. For at installere en pakke med navnet “PAKKENAVN” skriver du bare:

install.packages("PAKKENAVN")

Og for at bruge pakken i dit projekt skriver du så:

library("PAKKENAVN")

I RStudio kan du også installere pakker ved at vælge “Packages” i nederste højre vindue og her blot vælge de pakker du vil installere.
Her kan du også se de pakker du allerede har installeret og opdatere dem. For at se alle pakker der er installeret med en kommando skriver du:

installed.packages()

Og for at opdatere alle pakker med en kommando skriver du:

update.packages()

Du kan også afinstallere en pakke med kommandoen:

remove.packages("PAKKENAVN")

Få hjælp til en funktion

Der findes også en række hjælpekommandoer, som du kan bruge i R. Hvis du for eksempel gerne vil have hjælp til en bestemt funktion i R skriver du bare kommandoens navn med et ? foran.

?FUNKTIONNAVN

Og hvis du gerne vil se hvordan du bruger funktionen i R, skriver du:

example(FUNKTIONNAVN)

Hvis du vil se en liste med argumenterne du kan bruge i en funktion skriver du:

args(FUNKTIONNAVN)

Og hvis du vil søge i dokumentationen for R efter et bestemt søgeord, skriver du det med to ? foran og i en parentes:

??("SØGEORD")

 

Indlæs data i R

Der findes masser af forskellige måder du kan indlæse data i R, som du så kan arbejde med. Lad os lige gennemgå nogle af dem.

Indlæs testdata i R

I starten kan det være du gerne vil have lov til at lege med lidt testdata i R. For at se en liste med alt det testdata der er installeret skriver du:

data()

Bemærk i øvrigt her, at langt de fleste kommandoer i R har parenteser med i kommandoen. Hvis du skriver denne kommando i RStudio kommer der følgende liste:

Dette er altsammen datasæt med testdata, som du kan bruge til at analysere og plotte for at teste R. For at se det enkelte datasæt, skriver du bare datasættets navn og trykker på enter. Skriv for eksempel:

CO2

For at se en liste med kuldioxid optaget i forskellige græsplanter.

Der findes mange flere måder du kan bruge disse datasæt end blot at vise data, men det kommer jeg ind på senere.

Indlæs en CSV fil i R

Ofte har man data gemt som en CSV fil, dvs. en kommasepareret fil med data. En CSV fil er en fil som ofte laves og kan læses af Excel, men herudover er det også en tekstfil, hvor de enkelte kolonner i Excel er adskilt af et “;” og de enkelte rækker er adskilt af et linjeskift. Samme format kan R læse og du kan indlæse en CSV fil til R med kommandoen:

mydata <- read.csv("DATA.csv")

Denne kommando indlæser CSV filen DATA.csv som ligger i din arbejdsmappe. Se længere oppe, hvordan du skifter arbejdsmappe.
CSV filen behøver ikke nødvendigvis at ende på filtypen .csv for at virke. Det kan for eksempel sagtens være en almindelig tekstfil (.txt) som blot indeholder data der er formateret som en CSV fil. Den første række i CSV filen skal være en såkaldt header row, dvs. her er der kun overskrifter til de enkelte kolonner og ikke selve de data du skal bruge.
Hvis CSV filen ligger på en hjemmeside, kan du også nemt indlæse dataene direkte herfra ved at bruge denne kommando:

mydata <- read.csv("URLADRESSE")

Dette indlæser altså dataene fra CSV filen på den URL adresse i variablen mydata.

Indlæs en tekstfil i R

Hvis du har en tekstfil, hvor de enkelte kolonner ikke er adskilt med et semikolon, men med et andet tegn kan du bruge denne kommando.

mydata <- read.table("DATA.txt", sep="\t", header=TRUE)

Denne kommando indlæser filen DATA.txt i din arbejdsmappe, og betragter her TAB som det tegn du har adskilt kolonerne med. Bemærk her at \t betyder TAB og her kunne du f.eks. også have skrevet ” “, hvis det var et mellemrum du havde adskilt kolonerne med. Argumentet header=TRUE betyder at den første række er en header row, ligesom det var standard med kommandoen read.csv.
R er jo et sprog der primært er et statistisk programmeringssprog, og derfor vil R som standard opfatte nogle af de ord der findes i dine data som statistiske ord. Dette kan du undgå hvis du tilføjer argumentet stringsAsFactor=FALSE til kommandoen.

mydata <- read.table("DATA.txt", sep="\t", header=TRUE, stringsAsFactor=FALSE)

Alle disse ting kunne du også have gjort direkte i RStudio ved at vælge “File” og herefter “Import dataset”. Her kan du så for eksempel vælge CSV fil og importere denne til CSV.

Indlæs data fra udklipsholderen til R

Nu har du set hvordan du kan indlæse data fra en fil, men måske du har dataene gemt i din udklipsholder. Det kunne for eksempel være hvis du har markeret noget data i Excel og trykket CTRL+C for at kopiere til udklipsholder eller måske noget data fra en hjemmeside. Så bruger du bare følgende kommando, for at få R til at indlæse fra udklipsholderen:

x <- read.table(file = "clipboard", sep="\t", header=TRUE)

Bemærk også her, at R vælger at betragte TAB som det du har separeret kolonerne med, fordi der står \t under sep argumentet. Denne kommando virker kun i Windows. I Mac skal du i stedet bruge kommandoen:

x <- read.table(pipe("pbpaste"), sep="\t")

Indlæs data fra andre steder

Dette var altså en lille demonstration af hvordan du henter data ind fra en CSV-fil, tekstfil eller udklipsholderen. Men du kan jo også have data liggende i Excel, SPSS, SAS eller Stata filer. Eller måske du har dataene liggende i en database.
Jeg vil ikke komme nærmere ind på hvordan du gør i denne artikel, men du kan også indlæse data fra disse filer i R, ved at have bestemte pakker installeret. For eksempel er det pakken readxl du bruger til at indlæse data direkte fra Excelfiler og det er pakkerne RPostgreSQL, RMySQL, RMongo, RSQLite, RODBC du kan bruge til at indlæse data fra diverse databaser.
Hvis du har svært ved at huske alle de mange forskellige kommandoer, kan du også prøve Rio pakken, som selv finder ud af hvordan dataene skal importeres alt efter filtypen. For eksempel vil følgende indlæse en Excelfil med navnet DATA.xlsx i din arbejdsmappe.

mydata %lt- import("DATA.xlsx")

Rio kan håndtere mere end 30 forskellige filformater og du bruger bare kommandoen Import.

Lav en R script fil

Det er selvfølgelig nemt blot at indtaste kommandoer i R, og så få svaret med det samme. Men det bliver først rigtig anvendelig, hvis du kommer igang med at lave R script filer. R script filer er filer der indeholder alle de kommandoer der skal eksekveres. På den måde kan du lave en færdig kode, der så kan udføre en opgave i R og give dig et output. Det er også en nem måde at gemme arbejdet i R.
Du laver et nyt R script ved at trykke “File”, herefter “New File” og så “R Script”. Dette åbner et nyt dokument oppe i venstre øverste vindue, hvor du så kan skrive din R kode. Når du er færdig gemmer du filen som en R script fil ved at vælge “File” og herefter “Save”. Så vælger du et navn til din R script fil og gemmer din i din arbejdsmappe.

Andre måder at gemme på

Du kan også i din R kode skrive følgende kode, for at dit workspace bliver gemt til næste gang du starter R:

save.image()

Dette gemmer din R kode i en fil i din arbejdsmappe der hedder .RData.

Links

Under udarbejdelsen af denne introduktion til R, har jeg haft god gavn af følgende artikler og dokumenter.

Kender du selv gode R ressourcer er du velkommen til at tilføje dem i en kommentar.

0 0 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012

You may also like...

Abonner
Giv besked ved
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x