Pakkehåndtering i R

Sist endret

January 16, 2025

R-pakken, renv, er et verktøy som lar oss opprette et miljø for R og installere pakker. Det er anbefalt å bruke renv for å sikre at alle som jobber med prosjektet har samme versjon av pakkene. I tillegg er det enkelt å dele prosjektet med andre.

Hvor skal jeg kjøre kommandoer for renv?

Når du oppretter et renv-miljø, installerer eller oppdaterer pakker må du kjøre noen kommandoer. Hvor disse skal kjøres er avhengig av om du bruker RStudio, eller Jupyter.

I jupyter anbefaler vi at du oppretter renv-miljøet og installerer pakker fra R i terminalen. For å starte R i terminalen:

  1. Åpne en terminal fra Launcher
  2. Stå i mappen der du vil aktivere det virtuelle miljøet/installere pakker, dvs. prosjekt mappen.
  3. Starte R ved å skrive in R

Her er en kort video (uten lyd) for å vise dette:

I Rstudio kan du fint kjøre kommandoene direkte i console. Du finner console vanligvis nederste på venstre i RStudio.

Starte renv i et eksisterende prosjekt

For å installere R-pakker må du opprette et renv-miljø med renv. Dette kan gjøres ved å kjøre:

renv::init()

For å opprette et renv-miljø i Jupyter, navigere først til hovedmappen for prosjektet i terminalen og starter R. Etterpå, kan du kjøre renv::init().

Initialisere renv-miljø i RStudio med renv::init() i console.

Warning

For at renv skal fungere i RStudio er det viktig å jobbe i et R-project. Dvs. at du har en prosjekt-fil (.Rproj) i GitHub repoen din.

Hvis du ikke har det, kan du opprette en ved å velge File > New Project… > Version Control > Git > og lim inn git adressen for å clone ned repoen på nytt. Da vil det også kommer en .Rproj fil. Denne kan fint ligger på repoen.

Kommandoen renv::init() setter opp et renv-miljø i mappen du står i. Hvis du jobber i Jupyter, sjekk at du står i root av repoen (hovedmappen til repository).

Rent praktisk vil det si at du fikk følgende filer/mapper i mappen din:

  • renv.lock
    En fil som inneholder versjoner av alle pakker du benytter i koden din.

  • .Rprofile En fil som inneholder informasjon om oppsetting av miljø.

  • renv
    Mappe som inneholder alle pakkene du installerer.

  • renv/activate.R En fil som aktiverer renv miljøet for et prosjekt.

Ta i bruk renv-miljø

For å ta i bruk et renv-miljø må det aktiveres før koden kjøres. Dette gjøres automatisk i både Jupyter og RStudio ved hjelp av renv/activate.R filen.

For at renv-miljø kan brukes i Jupyter må også følgende pakke installeres.

For å åpne .R filer som notebooks i det nye renv-miljø må pakken IRkernel være installert hvis du jobber i Jupyter. Dette er ikke automatisk installert ved oppstart av et nytt renv-miljø. Du kan installere dette ved å kjøre

renv::install("IRkernel")

For at denne pakken skal være med i .lock-filen må det brukes et sted med for eksempel library(IRkernel) og lagres til renv.lock med renv::snapshot()-funksjonen (se lengere ned for detaljer)

Tip

Tidligere må også alle R-filene starte med renv::autoload() i Jupyter på Dapla. Dette er ikke nødvendig lenge med bruk av .R-filer, istedenfor .ipynb. Det er fortsatt nødvendig i produksjonssone (bakke-miljø).

Installering av pakker

Vi installerer pakker med funksjonen renv::install(). For eksempel, for å installere pakken PxWebApiData:

renv::install("PxWebApiData")

For å installere R-pakker som ligger på ‘statisticsnorway’ området på GitHub må det spesifiseres foran pakkenavnet:

renv::install("statisticsnorway/ssb-klassr")

For å installere en spesifikk versjon av en pakke kan du spesifisere dette med installering med @ og versjonsnummer. For eksempel å installere PxWEbApiData versjon 0.4.0:

renv::install("PxWebApiData@0.4.0")

For å lagre versjonsnummer av de nye pakkene som er installerte til renv.lock filen, kjør:

renv::snapshot()

Dele prosjektet og renv-miljøet med andre

Før du deler prosjektet forsikre det om at renv.lock-filen er oppdatert. Dette kan gjøres ved å kjøre renv::snapshot().

For at en pakke skal lagres i renv.lock må pakken benyttes ved library() et sted i prosjektet (på en .R eller .ipynb fil).

For å dele renv-miljøet som en del av prosjektet skal følgende filene være på github: renv.lock, .Rprofile og renv/activate.R

Ta i bruk et prosjekt og renv-miljø fra andre

Hvis prosjektet er opprettet av noen andre, og har blitt delt med deg, kan alle pakkene i prosjektet installeres samtidig. Clone repository kjør følgende for å installere alle nødvendige pakker:

renv:restore()

Avinstallering

Individuelle pakker kan fjernes fra renv-miljøet ved renv::remove()-funksjonen. For eksempel:

renv::remove("PxWebApiData")

For å fjerne fra renv.lock-filen også må du ta en snapshot() etterpå.

renv::snapshot()

En annen nyttig funksjon er renv::clean(). Dette fjerner alle pakker fra library som ikke er i bruk

renv::clean()

Igjen må du ta en snapshot() for at endringer skal lagres på renv.lock-filen

Oppgradere pakker

For å oppgradere en pakke kan du bruke renv::update(). For eksempel, for å oppgradere PxWebApiData skriv:

renv::update("PxWebApiData")

Husk å ta en snapshot() etterpå for å lagre endringer til renv.lock-filen. Det betyr at du og andre kan gjenskape miljøet på nytt.

renv::snapshot()

Oppgradering av R (kun produksjonssone på bakken)

Versjonen av R i produksjonssone oppgraderes jevnlig, i både Jupyter og RStudio. Dette er fordi operativsystemet og programmer som R er avhengig skal holdes oppdatert. For at R skal fungere optimalt må det oppgraderes ofte. Dette skaper noen utfordringer for renv-miljøer som er avhengig av en spesifikk versjon av R.

Hvis du plutselig får en feilmelding ved oppstart at R-versjonen er forskjellig fra det den som er oppgitt renv.lock-filen, har det trolig vært en oppgradering av R siden sist noen jobbet med koden. Følg denne oppskriften for å løse opp i problemene:

Kjør følgende kommandoer i R i terminal (Jupyter) eller i console (RStudio)

  1. Oppgrader versjon av renv ved:
terminal
renv::upgrade()
  1. Oppgrader alle pakkene ved:
terminal
renv::hydrate(update = "all")
  1. Lagre renv.lock filen:
terminal
renv::snapshot()

For mer informasjon kan du lese denne artikkelen om oppdatering av renv her

Ta det lang tid til å starte et renv-miljø?

Ved å aktivere et renv-miljø ved oppstart, søker R i alle programfiler for å sjekke at alle pakker som benyttes er installerte. Hvis du har en veldig stor repository kan dette ta lang tid. En løsning er å opprette en .renvignore fil som spesifisere hvilke filer skal ignoreres. For eksempel om alle R kode ligger i .R filer kan .renvignore inneholder linjen *.ipynb for å ignorere all notebookene om de finnes.

Flytting mellom Jupyter på bakken og Dapla

R-pakker installeres fra ulike sted når vi jobber på Dapla vs produksjonssone på bakken. For å bruke et renv-miljø i en repo som var laget på bakken, på Dapla, må vi endre adressen hvor pakkene skal installeres fra i renv.lock. Addressen skal se slik ut:

renv.lock
"Repositories": [
      {
        "Name": "CRAN",
        "URL": "https://packagemanager.posit.co/cran/latest"
      }
    ]

Kjøring mellom RStudio og Jupyter (prodsone)

Hvis du bytter mellom Jupyter og RStudio i prodsone, må du også endre adressen hvor pakkene skal installeres fra i renv.lock-filen. Disse to miljø kan har ulike versjoner av R og/eller ulike adresser å hente pakker fra. Det er anbefalt å holde deg til Jupyter eller RStudio om mulig.

Hvordan å løse problemer med pakkeinstallering i produksjonssone på bakken

Prosessen med å installere R-pakker på bakken er det samme som på Dapla. Noen pakker (for eksempel arrow og ROracle) kan være vanskelig å installere på grunn av 3. parti avhengigheter.

arrow

Hvis du sliter med installering av arrow kan du prøve å spesifisere versjonen som skal installeres. Det er foreløpige ulike versjoner av avhengigheter i RStudio og Jupyter pga de ulike systemer og oppsett.

renv::install("arrow@18.1.0.1")

Pakken er ganske stor, så det kan ta tid å installere den.

renv::install("arrow@17.0.0.1")

Pakken er ganske stor, så det kan ta tid å installere den.

ROracle

Pakken ROracle har systemavhengigheter som betyr at det kan være vanskelig å installere i produksjonssone på bakken i et renv-miljø. Hvis du opplever problemer, prøv å installere pakken fra en lokal versjon med følgende kommando i R:

ROracle_pakke <- "/ssb/bruker/felles/R_pakker/ROracle_1.4-1_R_x86_64-unknown-linux-gnu.tar.gz"

install.packages(
  ROracle_pakke,
  repos = NULL,
  type = "source")