3.1 Vad är ett paket i R?
Ett paket innehåller funktioner som underlättar och effektiviserar ditt arbete. Paketen är således tillägg till R och de utökar funktionaliteten i R. Även om standardinstallationen av R har många kraftfulla verktyg så räcker inte dessa för att arbeta effektivt och bekvämt. Du behöver installera paket och dessa gör arbetet både roligare och lättare. I dagsläget finns cirka 18810 paket. Du kan installera vilket paket som helst inom några sekunder. Paketen genomgår validering av experter. Alla paket har öppen källkod som du kan granska när du vill (detta görs sällan av nybörjare).
3.1.1 Exempel på populära paket till R
ggplot2
för visualisering av data.dplyr
för bearbetning av data.tidyr
för bearbetning av data.survival
för överlevnadsanalys.tidymodels
för att skapa, jämföra och utvärdera prediktionsmodeller.forcats
för att hantera kategoriska variabler.stringr
för att hantera textsträngar.purrr
för att effektivisera användning av funktioner.
3.1.2 Hur man installerar paket i R
Installera och aktivera paket
Ett paket installeras bara en gång. Efter installationen finns paketet tillgängligt för R. För att använda paketet måste du aktivera det varje gång du startar R.
Innan du använder ett paket måste du installera och aktivera paketet. Ett paket installeras bara en gång men det måste aktiveras varje gång du startar R. Standardinstallationen av R kommer med flera paket förinstallerade. Dessa paket innehåller de mest grundläggande funktionerna, som till exempel grundläggande matematiska operationer.
För att installera ett paket använder du funktionen install.packages()
. Här nedan installeras paketet dplyr
. Observera att paketets namn skrivs med citattecken:
install.packages("dplyr")
3.1.3 Hur man uppdaterar ett R-paket.
Även om du bara installerar paketet en gång kan du behöva uppdatera det. Uppdateringar görs mer sällan och för de flesta paket räcker en eller ett par uppdateringar per år. Uppdatera paketet genom följande kommando:
update.packages("dplyr")
Du kan också uppdatera ett paket genom att installera det igen (R skriver då över den gamla versionen av paketet).
3.1.4 Code breaking updates
De allra flesta uppdateringar av paket görs på ett sådant sätt att gammal (existerande) kod skall fungera normalt. Det betyder att din kod kommer med största sannolikhet fungera även efter att du har uppdaterat ett paket. Uppdateringar kan därför göras utan större oro. Ibland görs dock större förändringar i paket vilket kan leda till att din kod inte längre fungerar efter en uppdatering. På engelska kallas detta code breaking updates. Du bör misstänka detta om din kod returnerar error-meddelanden efter en uppdatering. Det är nästan alltid enkelt att lösa dessa problem genom att granska paketets uppdaterade dokumentation. Som regel krävs väldigt små justeringar av koden för att det ska fungera igen.
3.1.5 Installera paket utan kommando
Du kan installera paket i R utan att skriva kommando. Det rekommenderas inte eftersom man bör ha alla händelser och kommandon dokumenterade i kronologisk ordning i koden. För fullständighetens skull följer ändock instruktioner för hur man installerar paket utan kod. I exemplet nedan, se Figure 3.1, installerar vi paketet rms
:
- Klicka på fliken Packages i det nedre högra fönstret.
- Klicka på Install högst upp till vänster.
- Skriv namnet på paketet (rms) i sökrutan.
- Klicka på Install.
For att fortsätta den här kursen behöver vi installera flera paket. Du kan installera flera paket genom att upprepa funktionen install.packages()
på flera rader, som följer:
install.packages("dplyr")
install.packages("ggplot2")
install.packages("rms")
install.packages("tidymodels")
Ovanstående kod bryter dock mot principen DRY, som står för Don’t Repeat Yourself. När du programmerar skall du minimera antal repetitioner. Bra kod är kortfattad och innehåller inte upprepningar. Därför skapar vi nu en vektor med namnen på paketen, och i funktionen install.packages()
anger vi endast namnet på vektorn.
Observera att i koden nedan börjar vissa rader med #
, vilket innebär att de är kommentarer. En kommentar är helt enkelt en anteckning som förklarar koden så att du kan och dina medarbetare kan förstå den. Kommentaren utvärderas inte av R.
# Med funktionen c() skapas en vektor med paket som önskar installeras
new_packages <- c("dplyr", "ggplot2", "rms", "tidymodels")
# installerar paketen
install.packages(new_packages)
Vi hade kunna förkorta detta ytterligare genom att hoppa över momentet då vektorn skapas, som följer:
install.packages(c("dplyr", "ggplot2", "rms", "tidymodels"))
Den sista varianten är kortfattad och innehåller inga upprepningar. Notera också att i det sista exemplet har vi låtit en funktion (install.packages())
omsluta en annan funktion (c()
). Detta är tjusningen med R, nämligen möjligheten att bädda in funktioner i anda funktioner. Framgent kommer du upptäcka att detta möjliggör kraftfulla operationer.
3.1.6 Ladda paket i R
Varje gång du startar R så skapas en ny session. Detta innebär följande:
- Din Environment är tom.
- Endast enstaka paket som ingår i standardinstallationen är aktiverade.
Därför brukar varje script inledas med ett par rader som aktiverar de paket som skall användas. Det kan exempelvis se ut som följer i Figur 3.2. Notera att paket laddas med funktionen library()
.
Observera att citattecken inte behövs när paket laddas!
3.1.7 Error när paket aktiveras
R returnerar ett fel om du försöker ladda ett paket som inte är installerat. Vi kommer nu att försöka ladda ett paket som heter polish som inte är installerat:
library(polish)
Error in library(polish): there is no package called 'polish'
3.1.7.1 Lyckad aktivering av paket
R returnerar ett meddelande när ett paket har laddats. Det här meddelandet kan innehålla viktig information. När paketet dplyr laddas ses följande information:
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
Det finns viktig information i meddelandet ovan. Du kommer att se liknande meddelanden ofta och du måste vara uppmärksam på dessa. Meddelandet säger följande:
- Funktionerna
filter()
ochlag()
från paketetstats
blir maskerade. - Funktionerna
intersect()
,setdiff()
,setequal()
ochunion()
från paketetbase
blir maskerade.
Detta innebär att om du använder funktionen filter()
hädanefter så använder du filter()
som finns i paketet dplyr
och det samma gäller för övriga funktioner som maskerats av dplyr
. Du kan dock fortfarande använda de funktioner som är maskerade, men det kräver att du specificerar paketets namn innan funktionens namn, som följer:
stats::filter()
stats::lag()
base::intersect()
base::setdiff()
base::setequal()
base::union()
Detta är metoden för att explicit berätta för R vilken funktion som du vill använda. Notera två kolon (:
) mellan paketets och funktionens namn.
Maskerade funktioner
Vid aktivering av ett paket kan funktioner i andra paket maskeras. Det beror som regel på att funktionerna i de olika paketen har samma namn. För att använda maskerade funktioner måste paketets namn och två kolon (:
) föregå funktionens namn.
3.1.7.2 Error vid användning av funktioner från paket som inte är aktiverade
R returnerar ett fel om du försöker använda funktioner i paket som inte laddas. I exemplet nedan försöker vi använda funktionen splined()
som finns i ett paket som för närvarande inte är aktiverat.
# Vi ska leta efter siffran 5 i en följd av 9 siffror
# Strängar kan upptäckas med funktionen str_detect()
str_detect(string ='1 2 3 4 5 6 7 8 9',
pattern = '5')
Error in str_detect(string = "1 2 3 4 5 6 7 8 9", pattern = "5") :
could not find function "str_detect"
Det här felmeddelandet betyder helt enkelt att R inte kan hitta funktionen i något av de paket som för närvarande är aktiverade. För att åtgärda detta måste du antingen aktivera paketet (med funktionen library()
) eller specificera paketets namn (och två kolon) innan funktionens namn, som följer:
stringr::str_detect(string ='1 2 3 4 5 6 7 8 9', pattern = '5')
[1] TRUE
3.1.8 Pacman laddar och installera flera paket samtidigt
R har ingen inbyggd funktion för att aktivera flera paket samtidigt. Lyckligtvis finns funktionen p_load() i paketet pacman som gör det möjligt att aktivera flera paket samtidigt och dessutom installera paket som saknas.
Installera pacman med följande kommando:
install.packages("pacman")
Därefter kan du aktivera flera paket samtidigt med p_load(). Om du saknar något av paketen kommer pacman att installera dem:
p_load(survival, ggplot2, lubridate)
3.1.9 Andra paket i R
Alla paket som är granskade och godkända finns på CRAN.
3.2.0 Tidyverse: Ett revolutionerande paket
R har traditionellt betraktats som ett svårt språk. Detta är tämligen lätt att förstå när man granskar hur omständligt det kan vara att göra en så trivial sak som att filtrera rader en tabell. Ponera att du har en tabell med observationer på män och kvinnor och du vill nu bara behålla männen för ytterligare analyser. I traditionell R-kod skrivs detta som följer:
my_data_frame[my_data_frame$Sex == 'Male',]
my_data_frame
är namnet på vår data frameSex
är en kolumn i vår data frame- Symbolen
$
används för att referera en kolumn i en data frame.my_data_frame$Sex
innebär att vi vill använda kolumnenSex
imy_data_frame
.- Vi använder klammer (
[]
) för att filtrera rader så att allaMales
behålls. - I klammern skriver vi ett kommatecken (
,
) efterMales
för att klargöra att det är rader vi filtrerar. Efter kommatecknet skrivs inget såvida man inte vill välja kolumner också).
Detta är ett av många exempel på R-kod som de flesta har svårt att skriva och läsa. Tidyverse innehåller paket som förenklar programmering i R. Faktum är att tidyverse gör det möjligt för vem som helst att läsa och skriva R-kod. Nedan följer samma kod med dplyr, som är ett av paketen som ingår i tidyverse:
filter(my_data_frame, Sex=="Males")
Koden ovan är lätt att skriva och lätt att begripa. För att installera tidyverse skriver du följande kommando:
install.packages("tidyverse")
Detta kommer att ladda ner och installera tidyverse från CRAN. Tidyversepackage innehåller flera paket:
ggplot2
tibble
tidyr
readr
purrr
dplyr
3.2.0 Bioconductor: Paket för medicinsk forskning
Bioconductor är troligtvis världens mest använda mjukvara för beräkningar och analyser inom medicinsk grundforskning. Bioconductor består av ett stort antal paket som är särskilt utvecklade för medicinsk forskning. Hela listan på paket finner du här.
Installera paket från Bioconductor
Grundpaketen i Bioconductor installeras med följande kommando:
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install()
Installera specifika paket, exempelvis “GenomicFeatures” och “AnnotationDbi”, med kommandot:
BiocManager::install(c("GenomicFeatures", "AnnotationDbi"))
Om du har installerat Bioconductor kan du även lista alla tillgängliga paket med kommandot:
BiocManager::available()
3.2.1 ROpenSci
ROpenSci utgörs av erfarna forskare och mjukvaruutvecklare som också utvecklar paket särskilt för medicinsk forskning. Klicka här för att se samtliga paket.