3.1 Hva er en pakke i R?
En pakke inneholder funksjoner som forenkler og effektiviserer arbeidet ditt. Pakkene er altså tillegg til R, og de utvider funksjonaliteten i R. Selv om standardinstallasjonen av R har mange kraftige verktøy, er ikke disse nok til å arbeide effektivt og komfortabelt. Du må installere pakker, og disse gjør arbeidet både morsommere og enklere. I dag finnes det omtrent 18810 pakker. Du kan installere hvilken som helst pakke i løpet av noen sekunder. Pakkene gjennomgår validering av eksperter. Alle pakker har åpen kildekode som du kan gjennomgå når du vil (dette gjøres sjelden av nybegynnere).
3.1.1 Eksempler på populære pakker til R
ggplot2for visualisering av data.dplyrfor bearbeiding av data.tidyrfor bearbeiding av data.survivalfor overlevelsesanalyse.tidymodelsfor å lage, sammenligne og evaluere prediksjonsmodeller.forcatsfor å håndtere kategoriske variabler.stringrfor å håndtere tekststrenger.purrrfor å effektivisere bruken av funksjoner.
3.1.2 Hvordan man installerer pakker i R
Installere og aktivere pakker
En pakke installeres bare én gang. Etter installasjonen er pakken tilgjengelig for R. For å bruke pakken må du aktivere den hver gang du starter R.
Før du bruker en pakke, må du installere og aktivere pakken. En pakke installeres bare én gang, men den må aktiveres hver gang du starter R. Standardinstallasjonen av R kommer med flere pakker forhåndsinstallert. Disse pakkene inneholder de mest grunnleggende funksjonene, som for eksempel grunnleggende matematiske operasjoner.
For å installere en pakke bruker du funksjonen [install.packages()](https://rdrr.io/r/utils/install.packages.html). Nedenfor installeres pakken dplyr. Merk at pakkens navn skrives med anførselstegn:
install.packages("dplyr")3.1.3 Hvordan man oppdaterer en R-pakke.
Selv om du bare installerer pakken én gang, kan det hende du må oppdatere den. Oppdateringer gjøres sjeldnere, og for de fleste pakker holder det med én eller et par oppdateringer per år. Oppdater pakken med følgende kommando:
update.packages("dplyr")Du kan også oppdatere en pakke ved å installere den på nytt (R overskriver da den gamle versjonen av pakken).
3.1.4 Code breaking updates
De aller fleste oppdateringer av pakker gjøres slik at gammel (eksisterende) kode skal fungere normalt. Det betyr at koden din med stor sannsynlighet vil fungere også etter at du har oppdatert en pakke. Oppdateringer kan derfor gjøres uten større bekymring. Noen ganger gjøres det imidlertid større endringer i pakker, noe som kan føre til at koden din ikke lenger fungerer etter en oppdatering. På engelsk kalles dette code breaking updates. Du bør mistenke dette dersom koden din returnerer feilmeldinger (error) etter en oppdatering. Det er nesten alltid enkelt å løse disse problemene ved å gå gjennom pakkens oppdaterte dokumentasjon. Som regel kreves det svært små justeringer av koden for at den skal fungere igjen.
3.1.5 Installere pakker uten kommando
Du kan installere pakker i R uten å skrive kommandoer. Det anbefales ikke, fordi man bør ha alle hendelser og kommandoer dokumentert i kronologisk rekkefølge i koden. For fullstendighetens skyld følger likevel instruksjoner for hvordan man installerer pakker uten kode. I eksemplet nedenfor, se figur 3.1, installerer vi pakken rms:
- Klikk på fanen Packages i vinduet nederst til høyre.
- Klikk på Install øverst til venstre.
- Skriv navnet på pakken (rms) i søkefeltet.
- Klikk på Install.

For å fortsette dette kurset må vi installere flere pakker. Du kan installere flere pakker ved å gjenta funksjonen [install.packages()](https://rdrr.io/r/utils/install.packages.html) på flere linjer, slik:
install.packages("dplyr")
install.packages("ggplot2")
install.packages("rms")
install.packages("tidymodels")Koden ovenfor bryter imidlertid med prinsippet DRY, som står for Don’t Repeat Yourself. Når du programmerer, skal du minimere antall gjentakelser. God kode er konsis og inneholder ikke gjentakelser. Derfor lager vi nå en vektor med navnene på pakkene, og i funksjonen [install.packages()](https://rdrr.io/r/utils/install.packages.html) angir vi bare navnet på vektoren.
Merk at i koden nedenfor begynner enkelte linjer med #, noe som betyr at de er kommentarer. En kommentar er rett og slett et notat som forklarer koden, slik at du og dine medarbeidere kan forstå den. Kommentaren evalueres ikke av R.
## Med funksjonen c() lages en vektor med pakker som skal installeres
new_packages <- c("dplyr", "ggplot2", "rms", "tidymodels")
## installerer pakkene
install.packages(new_packages)Vi kunne ha forkortet dette ytterligere ved å hoppe over trinnet der vektoren lages, slik:
install.packages(c("dplyr", "ggplot2", "rms", "tidymodels"))Den siste varianten er konsis og inneholder ingen gjentakelser. Legg også merke til at vi i det siste eksemplet har latt én funksjon ([install.packages()](https://rdrr.io/r/utils/install.packages.html)) omslutte en annen funksjon ([c()](https://rdrr.io/r/base/c.html)). Dette er det fine med R, nemlig muligheten til å bygge inn funksjoner i andre funksjoner. Etter hvert vil du oppdage at dette muliggjør kraftige operasjoner.
3.1.6 Laste pakker i R
Hver gang du starter R, opprettes en ny sesjon. Dette innebærer følgende:
- Ditt Environment er tomt.
- Bare enkelte pakker som inngår i standardinstallasjonen, er aktivert.
Derfor begynner hvert skript gjerne med et par linjer som aktiverer de pakkene som skal brukes. Det kan for eksempel se ut som i figur 3.2. Merk at pakker lastes med funksjonen [library()](https://rdrr.io/r/base/library.html).

Merk at anførselstegn ikke trengs når pakker lastes!
3.1.7 Error når pakker aktiveres
R returnerer en feil dersom du prøver å laste en pakke som ikke er installert. Vi skal nå prøve å laste en pakke som heter polish, som ikke er installert:
library(polish)Error in library(polish): there is no package called 'polish'3.1.7.1 Vellykket aktivering av pakker
R returnerer en melding når en pakke er lastet. Denne meldingen kan inneholde viktig informasjon. Når pakken dplyr lastes, vises følgende informasjon:
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, unionDet finnes viktig informasjon i meldingen ovenfor. Du kommer til å se lignende meldinger ofte, og du må være oppmerksom på disse. Meldingen sier følgende:
- Funksjonene
[filter()](https://dplyr.tidyverse.org/reference/filter.html)oglag()fra pakkenstatsblir maskert. - Funksjonene
[intersect()](https://generics.r-lib.org/reference/setops.html),[setdiff()](https://generics.r-lib.org/reference/setops.html),[setequal()](https://generics.r-lib.org/reference/setops.html)og[union()](https://generics.r-lib.org/reference/setops.html)fra pakkenbaseblir maskert.
Dette betyr at dersom du bruker funksjonen [filter()](https://dplyr.tidyverse.org/reference/filter.html) heretter, bruker du [filter()](https://dplyr.tidyverse.org/reference/filter.html) som finnes i pakken dplyr, og det samme gjelder for de øvrige funksjonene som er maskert av dplyr. Du kan likevel fortsatt bruke de maskerte funksjonene, men det krever at du spesifiserer pakkens navn foran funksjonens navn, slik:
stats::filter()
stats::lag()
base::intersect()
base::setdiff()
base::setequal()
base::union()Dette er metoden for å fortelle R eksplisitt hvilken funksjon du vil bruke. Legg merke til de to kolonene (:) mellom pakkens og funksjonens navn.
Maskerte funksjoner
Ved aktivering av en pakke kan funksjoner i andre pakker bli maskert. Det skyldes som regel at funksjonene i de ulike pakkene har samme navn. For å bruke maskerte funksjoner må pakkens navn og to kolon (:) stå foran funksjonens navn.
3.1.7.2 Error ved bruk av funksjoner fra pakker som ikke er aktivert
R returnerer en feil dersom du prøver å bruke funksjoner i pakker som ikke er lastet. I eksemplet nedenfor prøver vi å bruke funksjonen splined(), som finnes i en pakke som for øyeblikket ikke er aktivert.
## Vi skal lete etter tallet 5 i en rekke av 9 tall
## Strenger kan oppdages med funksjonen 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"Denne feilmeldingen betyr rett og slett at R ikke finner funksjonen i noen av de pakkene som for øyeblikket er aktivert. For å rette dette må du enten aktivere pakken (med funksjonen [library()](https://rdrr.io/r/base/library.html)) eller spesifisere pakkens navn (og to kolon) foran funksjonens navn, slik:
stringr::str_detect(string ='1 2 3 4 5 6 7 8 9', pattern = '5')[1] TRUE3.1.8 Pacman laster og installerer flere pakker samtidig
R har ingen innebygd funksjon for å aktivere flere pakker samtidig. Heldigvis finnes funksjonen p_load() i pakken pacman, som gjør det mulig å aktivere flere pakker samtidig og dessuten installere pakker som mangler.
Installer pacman med følgende kommando:
install.packages("pacman")Deretter kan du aktivere flere pakker samtidig med p_load(). Hvis du mangler noen av pakkene, vil pacman installere dem:
p_load(survival, ggplot2, lubridate)3.1.9 Andre pakker i R
Alle pakker som er gjennomgått og godkjent, finnes på CRAN.
3.2.0 Tidyverse: En revolusjonerende pakke
R har tradisjonelt blitt betraktet som et vanskelig språk. Dette er ganske lett å forstå når man ser hvor omstendelig det kan være å gjøre noe så trivielt som å filtrere rader i en tabell. Anta at du har en tabell med observasjoner av menn og kvinner, og at du nå bare vil beholde mennene for videre analyser. I tradisjonell R-kode skrives dette slik:
my_data_frame[my_data_frame$Sex == 'Male',]**my_data_frame**er navnet på vår data frameSexer en kolonne i vår data frame- Symbolet
**$**brukes for å referere til en kolonne i en data frame.**my_data_frame$Sex**betyr at vi vil bruke kolonnenSexi**my_data_frame**.- Vi bruker hakeparenteser (
**[]**) for å filtrere rader slik at alleMalesbeholdes. - I hakeparentesen skriver vi et komma (
**,**) etterMalesfor å tydeliggjøre at det er rader vi filtrerer. Etter kommaet skrives ingenting med mindre man også vil velge kolonner).
Dette er ett av mange eksempler på R-kode som de fleste synes er vanskelig å skrive og lese. Tidyverse inneholder pakker som forenkler programmering i R. Faktisk gjør tidyverse det mulig for hvem som helst å lese og skrive R-kode. Nedenfor følger den samme koden med dplyr, som er en av pakkene som inngår i tidyverse:
filter(my_data_frame, Sex=="Males")Koden ovenfor er lett å skrive og lett å forstå. For å installere tidyverse skriver du følgende kommando:
install.packages("tidyverse")Dette vil laste ned og installere tidyverse fra CRAN. Tidyverse-pakken inneholder flere pakker:
ggplot2tibbletidyrreadrpurrrdplyr
3.2.0 Bioconductor: Pakker for medisinsk forskning
Bioconductor er trolig verdens mest brukte programvare for beregninger og analyser innen medisinsk grunnforskning. Bioconductor består av et stort antall pakker som er spesielt utviklet for medisinsk forskning. Hele listen over pakker finner du her.
Installere pakker fra Bioconductor
Grunnpakkene i Bioconductor installeres med følgende kommando:
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install()Installer spesifikke pakker, for eksempel “GenomicFeatures” og “AnnotationDbi”, med kommandoen:
BiocManager::install(c("GenomicFeatures", "AnnotationDbi"))Hvis du har installert Bioconductor, kan du også liste opp alle tilgjengelige pakker med kommandoen:
BiocManager::available()3.2.1 ROpenSci
ROpenSci består av erfarne forskere og programvareutviklere som også utvikler pakker spesielt for medisinsk forskning. Klikk her for å se alle pakkene.
