R + RStudio

LÄA110 (HT24)

Erik Bülow

Avdelningen för samhällsmedicin och folkhälsa

R: Programeringsspråk

  • Öppen källkod: (“free” as in …) gratis öl 🍺 och yttrandefrihet 📣!

  • Akademiskt statistikverktyg 🎓 (jmfr SAS inom läkemedelsindustrin 💊🏭 och Python inom “ML/Data science” 👨‍💻)

  • v. 1 släpptes 🗓️ 2000-02-29 (utvecklats sedan 1993)

  • R version 4.4.1 (2024-06-14)

  • Interaktivt skriptspråk men ofta kombinerat med RStudio (Posit)1

R: Varifrån?

 print(citation(), bibtex = FALSE)
To cite R in publications use:

  R Core Team (2024). _R: A Language and Environment for Statistical
  Computing_. R Foundation for Statistical Computing, Vienna, Austria.
  <https://www.R-project.org/>.

We have invested a lot of time and effort in creating R, please cite it
when using it for data analysis. See also 'citation("pkgname")' for
citing R packages.

R: Varför?

  • 💪 Extremt flexibelt: databearbetning, analys, modellering, visualisering och rapportering

  • 💰 Gratis och transparent

  • 👨‍👩‍👧‍👧 Användargrupper (User groups) och stor hjälpsamhet på nätet

  • Lätt att dela kod (jmfr. att beskriva manuella GUI-steg)

  • Mogen kodbas som förbättrats över tid (utvecklats i 30 år; jmfr t ex Julia)

R: Varför inte?

  • Hög inlärningströskel ⛰️

  • Kräver att man programmerar1 🧑‍💻

  • Lite annorlunda jämfört med andra programmeringsspråk2

  • Finns inget företag eller dylikt som kan ge officiell support (dock inte sämre)

R: När ska du välja R istf SPSS?

  • Om du lockas av programmering 💻

  • Om du ser en framtid inom kvantitativ forskning (doktorera?) 🧑‍🔬

  • Om du vill kunna göra mer avancerade saker som inte stöds av SPSS

RStudio

  • Integrerad utvecklingsmiljö (Integrated Development Environment; IDE)

  • Gratis i grundutförande

  • Från företaget Posit (tidigare RStudio)

  • Public Benefit Corporation (PBC)

R: Interaktiv användning

Kan användas som terminalbaserad (mini)räknare

1+1
[1] 2
pi
[1] 3.141593
log(exp(1))
[1] 1
cos(pi) + 42 / 26 - atan(37)
[1] -0.9283913
print("Hej på dig!")
[1] "Hej på dig!"

R: Tilldelning/återanvändning

Det som skrivs i konsolen “printas” direkt.

Det man vill spara tilldelas med <- (eller =)

Kortkommando: Alt/option + “-”

x <- 1
x
[1] 1
y <- 2 
y 
[1] 2
z <- x + y
z
[1] 3

Case sensitive (ABC != abc != Abc != aBc != …)

R: Datatyper

  • logical: TRUE, FALSE

  • numeric: -23, 2.123, pi

  • character: "hi", "low"

  • Datum: kan vara lite komplicerat …

    • Lättast lagra som “character” med format yyyy-mm-dd och tolka via as.Date()

    • Använd paket1 så som {clock} eller {lubridate}

R: Vektorer

c(1, 1, 2, 3, 5, 8) # numerisk vektor
[1] 1 1 2 3 5 8
c(TRUE, FALSE) # boolsk/logisk vektor
[1]  TRUE FALSE
c("hej", "på", "dig") # character vector
[1] "hej" "på"  "dig"
as.Date(c("1985-05-04", "2023-11-22", "2024-01-26")) # datum
[1] "1985-05-04" "2023-11-22" "2024-01-26"

R: Funktioner

  • Funktioner används för att göra saker med data.

  • Skriver man namnet_på_funktionen ser man hur den är definierad

  • Skriver man parenteser efter så anropar man funktionen: namnet_på_funktionen()

  • De flesta funktioner har ett eller flera argument namnet_på_funktionen(a = x, b = y, c = z)

  • ?funktionsnamn i konsolen (eller tryck F1) för hjälp

R: Exempel: c()

Kombinerar/konkatinerar värden till vektorer

c
function (...)  .Primitive("c")
?c
c()
NULL
c(1, 2, 3)
[1] 1 2 3

R: Saknade värden

  • Kodas som NA (Non Available eller Non Applicable)

  • Funkar oftast att bara skriva just NA (inga citationstecken)1

  • Alla datatyper kan vara NA

    c(1, 2, NA)
    [1]  1  2 NA
    c("banan", NA, "get")
    [1] "banan" NA      "get"  
    c(TRUE, FALSE, NA)
    [1]  TRUE FALSE    NA

R: Hantera saknade värden

  • Vad är medelvärdet av 1, 37, 42?

    mean(1, 37, 42) # OBS! Glöm inte c(...)
    [1] 1
    mean(c(1, 37, 42))
    [1] 26.66667
  • Vad är medelvärdet av 1, 37, NA, 42?

    mean(c(1, 37, NA, 42))
    [1] NA
  • Medelvärdet av en samling värden, varav ett okänt, blir förstås också okänt

  • Hur kan vi hantera detta? Kolla ?mean

    mean(c(1, 37, NA, 42), na.rm = TRUE)
    [1] 26.66667

R: Data frame

Datastruktur som liknar Excel-blad eller data i SPSS.

Kolumner består av vektorer av olika sorter.

iris # printa data frame i konsolen
View(iris) # Öppna en mer grafisk struktur
tail(iris) # titta på de sista 6 raderna
str(iris) # få information om strukturen
head(iris, 5) # Visa 5 första raderna
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

RStudio: Projekt

  • Samla alla filer (data/R-skript/resultat) i projekt-mapp på datorn

  • Bäst om sökvägen endast består av A-Z/a-z, siffror samt “_” (undvik å, ä, ö samt mellanslag):

    • Windows: C:\User\banane\Documents\nice_project

    • Mac: /Users/xbuler/Documents/nice_project

RStudio: Skript

  • Bäst att inte skriva direkt i konsolen utan i en textfil som sparas regelbundet.

  • Döp den till vad_du_vill.R

  • Allt i skriptet är R-kod utom rader som inleds med #. Dessa är kommentarer till mänskliga läsare (inkl ditt eget framtida jag).1

RStudio: Quarto

  • Blanda kommentarer/R-kod/figurer/tabeller i ett och samma dokument

  • Fungerar lite som en vanlig orbehandlare

  • Denna presentation är gjord på detta sätt!

R/RStudio: Data

  • Ofta lättast sköta själva datainmatningen/förberedelsen i Excel, SPSS eller annat program.

  • Spara filen i “RStudio-projektet” t ex i en undermapp “data”.

  • Importera data via grafiska gränssnittet i RStudio

  • Kopiera genererade inläsningskommandon till skriptfilen.

R: Sökvägar

  • I Windows: Byt ut \ mot / vid referens till fil:

    • C:\User\banane\Documents\nice_project
    • C:/User/banane/Documents/nice_project
  • Använd relativa sökvägar inom projektet

    • C:/User/banane/Documents/nice_project/data/my_data.csv
    • data/my_data.csv
  • t ex: df <- read.csv("data/my_data.csv")

R/RStudio: Paket

  • Alla funktioner (med mera) finns i paket.

  • Några paket kommer förinstallerade.

  • Detta behöver man (nästan aldrig) tänka på!

R: CRAN

  • Kvalitetssäkrade och lättinstallerade tilläggspaket finns i The Comprehensive R Archive Network

  • Installera via grafiskt gränssnit (GUI): Packages > Install

  • eller kommando: install.packages("name_of_package")

Använda funktioner från installerade paket

  • Installerade paket måste pekas ut explicit vid användning:

    • Ladda hela paketet (rekommenderas i början):
      • library("name_of_package") + sedan name_of_function(x, y, x)
    • Referera varje funktion explicit varje gång:
      • name_of_package::name_of_function()

R: Tibble

Delar alla egenskaper med data.frames men lite snyggare/modernare

library(tidyverse)
as_tibble(iris)
# A tibble: 150 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ℹ 140 more rows
glimpse(iris)
Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
$ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
$ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
$ Species      <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…

R: Pipe

|> (eller tidigare %>%)

# Alt 1: Modifiera ett objekt stegvis med massa nya nammn på vägen
steg1 <- foo(x)
steg2 <- bar(steg1)
steg3 <- baz(steg2)

# Alt 2: Funktion i funktion i funktion
steg3 <- baz(bar(foo(x)))

# Alt 3: Med |> (lättare att läsa och skriva)
steg3 <- x |> foo() |> bar() |> baz()

Att lära sig