Pakkehåndtering i R - renv
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:
- Åpne en terminal fra Launcher
- Stå i mappen der du vil aktivere det virtuelle miljøet/installere pakker, dvs prosjekt mappen.
- 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
::init() renv
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
::autoload() renv
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
::install("PxWebApiData") renv
For å installere R-pakker som ligger på ‘statisticsnorway’ området på github må det spesifiseres foran pakkenavnet:
notebook
::install("statisticsnorway/ssb-klassr") renv
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
::install("PxWebApiData@0.4.0") renv
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
::snapshot() renv
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
:restore() renv
Avinstallering
Individuelle pakker kan fjernes fra renv-miljøet ved renv::remove()
-funksjonen. For eksempel:
terminal
::remove("PxWebApiData") renv
For å fjerne fra renv.lock-filen også må du ta en snapshot()
etterpå.
terminal
::snapshot() renv
En annen nyttig funksjon er renv::clean()
. Dette fjerner alle pakker fra library som ikke er i bruk
terminal
::clean() renv
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
::update("PxWebApiData") renv
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
::snapshot() renv
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:
Start R i terminal.
Oppgrader versjon av renv ved:
terminal
::upgrade() renv
- Oppgrader alle pakkene ved:
terminal
::hydrate(update = "all") renv
- Lagre renv.lock filen:
terminal
::snapshot() renv
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")