Pakkehåndtering i R - renv

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.

Oppretting av renv-miljø og installering av pakker må gjøres fra terminal for å få riktig oppsett. For å starte R i terminalen i Jupyter/DAPLA:

  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

Starte renv i et eksisterende prosjekt

For å installere dine egne R-pakker må du opprette et renv-miljø med renv. Dette kan gjøres ved å starte R i terminalen (se over) og skrive:

terminal
renv::init()

Kommandoen aktiverer et renv-miljø i mappen du står i. 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.

Kobler en .R eller notebook fil til et renv-miljø

For å ta i bruk et renv-miljø må det aktiveres ved starten av koden som skal kjøres. I JupyterLab når du åpner en .R-fil som en notebook må renv-miljøet aktiveres ved:

notebook
renv::autoload()

Deretter kan du benytte pakker som er installerte (se neste avsnitt) og funksjoner ved library() osv. Funkjsonen renv::autoload() vil lete etter filene i prosjektet for å aktivere miljøet, både i prosjekt-mappen og i foreldre-mapper.

Installering av pakker

Pakker kan installeres fra R på terminalen eller i en notebook/.R fil. Vi installerer pakker med funksjonen renv::install(). For eksempel, for å installere pakken PxWebApiData:

notebook
renv::install("PxWebApiData")

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

notebook
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:

terminal
renv::install("PxWebApiData@0.4.0")

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

notebook
`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:

notebook
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 og start deretter R i terminalen. Kjør følgende for å installere alle nødvendige pakker:

terminal
renv:restore()

Avinstallering

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

terminal
renv::remove("PxWebApiData")

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

terminal
renv::snapshot()

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

terminal
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:

terminal
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.

terminal
renv::snapshot()

Oppgradering av R

I Jupyterlab på Dapla og i produksjonssone vil versjonen av R oppgraderes jevnlig. 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 eller når du kjøre renv::autoload(), om at R-versjonen er forskjellig fra det den som e r oppgitt 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:

Benytt prosjekt-biblioteket ved å kjøre:

  1. Start R i terminal.

  2. 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 renv::autoload() 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 en 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 *.ipynb (ignorere all notebook filer).

Flytting mellom jupyter på bakken og Dapla

Pakker installeres fra forkjellige sted når vi jobber på Dapla vs jupyter på bakken. For å benytte et renv-miljø i Jupyter som var laget i Jupyter på bakken må vi endre repository i renv.lock-filen.

Pakke installering med renv på bakken

Prosessen med å installere pakker for R på bakken er det samme som på Dapla. Noen pakker (for eksempel devtools) kan foreløpig ikke installeres på bakken på egenhånd pga 3. parti avhengigheter. Vi jobber med å finne en løsning til dette.

For å installere arrow, kopier og kjør følgende kommando i R:

terminal
install.packages("/ssb/bruker/felles/R_pakker/arrow_11.0.0.2.tar.gz",
                repos = NULL,
                type = "source")