(Acest articol a fost publicat pentru prima dată pe R Funcționeazăși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Recent, a avut loc o explozie de manageri de pachete/mediu/platformă în ecosistemul R,1 și utilizatorii R culeg cu adevărat roadele atâtor unelte coapte și nituitoare. Dar, mi s-a părut dur2 pentru a le urmări pe toate și a înțelege ce sunt și cum sunt diferite!
Bănuiesc că nu sunt singurul. Colega mea Libby Heeren și cu mine am organizat recent un laborator de știință a datelor cu Eric Nantz pentru a prezenta {rix} și Nix (ceea ce a fost minunat! Fiți cu ochii pe canalul Posit YouTube pentru a afla când este publicată înregistrarea), iar primele trei și ceva de întrebări ale publicului au fost despre cum se compară {rix} cu X ({renv}, rv, rv, util să scriu un rezumat de cinci instrumente). Am auzit despre: {renv}, {rix}, rv, uvr și ir.3
Deși toate sunt legate de urmărirea sau izolarea dependențelor, ele funcționează la un „nivel” diferit unul de celălalt. TL;DR:
- {rix} instantanee întregul mediu de sistem
- {renv}, rv și uvr gestionează dependențele pachetelor R într-un singur proiect R
- ir gestionează dependențele pentru un singur script R, mai degrabă decât un proiect

Nu vreau/nu pot judeca care este cel mai bun sau care recomand, pentru că sincer nu am avut ocazia să le explorez pe toate pe deplin (un mod foarte diplomatic de a spune că încă nu le-am folosit pe toate într-un context real), dar mi-ar plăcea să aud părerile celorlalți despre care cred că este cel mai bun instrument pentru că îmi imaginez că oamenii le au! 😀


(Ține cont de părtinirea recentă).
Cu asta, să începem, mergând cronologic prin lansare!
{renv}
Caz de utilizare
Acesta este un pachet de lungă durată susținut de Posit (creatorii RStudio) folosit pentru managementul pachetului R local de proiect.
Cum se utilizează {renv}
{renv} este iterativ și retrospectiv: instalați mai întâi pachetele, apoi faceți un instantaneu.
- Instalați pachetul {renv}:
- În cadrul unui proiect, inițializați {renv}:
- Instalați pachete:
Instalați pachetele în mod obișnuit, de exemplu, install.packages().
Când instalați pachete, acestea vor fi instalate într-o bibliotecă specifică proiectului.
- Înregistrați pachetele bibliotecii dvs. într-un fișier de blocare:
Acest fișier de blocare captează versiunile exacte ale acelor pachete:
{
"R": {
"Version": "4.4.2",
"Repositories": (
{
"Name": "CRAN",
"URL": "https://cloud.r-project.org"
}
)
},
"Packages": {
"dplyr": {
"Package": "dplyr",
"Version": "1.1.4",
"Source": "Repository",
"Repository": "CRAN",
"Hash": "fedd9d00c2944ff00a0e2696ccf048ec"
},
"ggplot2": {
"Package": "ggplot2",
"Version": "3.5.1",
"Source": "Repository",
"Repository": "CRAN",
"Hash": "44c6a2f8202d5b7e6c72a95ca7ea1795"
}
}
}
- Repeta:
Pe măsură ce continuați să adăugați pachete, continuați să faceți instantanee pentru a actualiza fișierul de blocare.
Câteva considerații
Deoarece {renv} este iterativ și retroactiv, puteți instala accidental pachete care sunt în conflict cu pachetele pe care le-ați instalat mai devreme.
În timp ce {renv} urmărește versiunea dvs. R, nu o gestionează în mod intenționat. Dacă trebuie să schimbați versiunile R, veți dori o unealtă precum platforma. Consultați documentația renv pentru lista completă de avertismente.
{rix}
Caz de utilizare
{rix} operează cu un nivel mai sus față de celelalte instrumente din această listă. În loc să gestioneze pachetele într-o instalare R, {rix} folosește Nix, un manager de pachete de uz general, pentru a face instantanee un întreg mediu software: R în sine, pachete, şi orice dependențe la nivel de sistem de care au nevoie.
Cum se folosește {rix}
{rix} este retrospectiv, dar într-un sens diferit de {renv}. Declarați mediul pe care îl doriți dinainte, iar Nix îl construiește de la zero (luând dintr-un index de pachet, mai degrabă decât biblioteca instalată în prezent).
- Instalați Nix și pachetul {rix}:
- Declarați-vă mediul:
Scrieți un scenariu mic (de exemplu, generate_env.R) descriind versiunea R și pachetele de care aveți nevoie:
library(rix)
rix(
r_ver = "4.4.2",
r_pkgs = c("dplyr", "ggplot2"),
project_path = "."
)
Rularea acestui script generează un default.nix fișier, o descriere în text simplu a mediului.
- Construiți mediul:
Funcţionare nix-build creează mediul în care este stocat /nix/store:
Apoi, puteți trece în acest mediu în mod interactiv, rulând nix-shell.
De acolo, puteți lucra normal lansând R, scriind scripturi, redând documente Quarto etc.
Când doriți să adăugați un pachet nou, editați generate_env.R și rulați din nou acel script pentru a regenera default.nixși apoi alergați nix-build/nix-shelldin nou.
Câteva considerații
Deoarece {rix} depinde de Nix, este nevoie de un lift mai mare pentru a instala și a învăța Nix în sine. În schimb, obțineți reproductibilitate care se extinde dincolo de pachetele R până la versiunea R și chiar dependențe de sistem.
rv
Caz de utilizare
Acesta este un instrument relativ nou al lui A2-ai, scris în limbajul Rust, tot atât de popular, folosit pentru managementul pachetelor R local de proiect.
Acceptă mai multe depozite de pachete cu control sursă pentru fiecare pachet (de exemplu, forțarea unui anumit pachet să fie construit din sursă vs. binar) și pretinde îmbunătățiri mari ale vitezei (20x+) față de {renv} pentru instalări.
rv este declarativ: scrieți pachetele și versiunile dorite într-un fișier de configurare, iar rv rezolvă întregul grafic de dependență înainte de a instala orice.
Cum se utilizează rv
- Instalați rv:
rv este un instrument independent de linie de comandă, nu un pachet R. Există câteva instrucțiuni de instalare; consultați documentația pentru mai multe. Am Homebrew pe Mac, așa că pot rula:
- Începeți un nou proiect:
Începeți un nou proiect cu rv init. De exemplu, rularea mai jos creează un nou folder numit hello_world:
Dacă deschideți hello_world folder, veți vedea că rv a creat diverse fișiere și foldere în folderul proiectului dvs.:
hello_world/
rv/
library/
scripts/
activate.R
rvr.R
.gitignore
.Rprofile
rproject.toml
- Actualizați fișierul de configurare:
Nu vreau să repet documentația pentru că este destul de excelentă, dar, în esență, ați completa pachetele dvs. ca dependențe în rproject.toml:
r_version = "4.4.2"
# A list of packages to install and any additional configuration
# Examples:
# "dplyr",
# {name = "dplyr", repository = "CRAN"},
# {name = "dplyr", git = "https://github.com/tidyverse/dplyr.git", tag = "v1.1.4"},
dependencies = (
"dplyr",
"ggplot2"
)
- Instalați pachete:
Apoi, fugi rv sync pentru a instala pachetele din fișierul de configurare, precum și toate dependențele acestora:
Aceasta rezolvă graficul de dependență și scrie versiunile exacte în an rv.lock fișier, ceva de genul:
((packages)) name = "dplyr" version = "1.1.4" repository = "CRAN" source = "Repository" hash = "fedd9d00c2944ff00a0e2696ccf048ec" ((packages)) name = "ggplot2" version = "3.5.1" repository = "CRAN" source = "Repository" hash = "44c6a2f8202d5b7e6c72a95ca7ea1795"
Câteva considerații
Deoarece rv este declarativ și rezolvă întregul grafic de dependență în avans, este mai puțin îngăduitor să „instalați tot ce aveți nevoie pe măsură ce mergeți” munca exploratorie pe care {renv} o găzduiește; este de așteptat să cunoașteți (sau să vă dați seama) dependențele dvs. înainte de a vă putea sincroniza.
S-ar putea să observați că rv-urile rproject.toml are o r_version câmp, dar aceasta nu gestionează de fapt versiunea R. La fel ca {renv}, rv nu descarcă, instalează sau schimbă versiunile R pentru dvs. (din nou, ați dori un instrument ca rig pentru asta).
Dacă doriți un singur instrument care urmărește atât pachetele dvs. R, cât și versiunea R și poate schimba de fapt versiunile R pentru dvs., poate doriți să verificați…
uvr
Caz de utilizare
uvr este construit de nbafrank, un dezvoltator independent. La fel ca rv, este scris și în Rust și este modelat în mod explicit pe uv-ul lui Python, adică cel mai bun lucru care s-a întâmplat ecosistemului Python într-un deceniu.
Se strânge Managementul pachetelor R și managementul versiunilor R (două lucruri pe care {renv} și rv le tratează separat), susținute de un singur fișier de blocare (uvr.lock) care este menit să fie „sursa adevărului” pentru un proiect.
Cum se folosește uvr
uvr, ca și rv, este declarativ: adăugați pachete (și opțional o constrângere de versiune R) la un manifest, iar uvr rezolvă și blochează întregul grafic de dependență înainte de a instala orice.
- Instalați uvr:
uvr este un binar de sine stătător, nu un pachet R (deși un pachet R însoțitor, uvr-r, vă permite să îl conduceți din consola R în loc de terminal).
curl -fsSL https://raw.githubusercontent.com/nbafrank/uvr/main/install.sh | sh
- Începeți un nou proiect:
mkdir my-project && cd my-project uvr init --r-version ">=4.4.2"
Aceasta creează o uvr.toml manifest în folderul proiectului.
- Adăugați pachete:
- Instalați totul din fișierul de blocare:
Aceasta este ceea ce generează și păstrează uvr.lock actualizat, captând atât versiunea R, cât și versiunile pachetului, ceva de genul:
r-version = "4.4.2" ((packages)) name = "dplyr" version = "1.1.4" source = "cran" hash = "fedd9d00c2944ff00a0e2696ccf048ec" ((packages)) name = "ggplot2" version = "3.5.1" source = "cran" hash = "44c6a2f8202d5b7e6c72a95ca7ea1795"
- Rulați scripturi în mediul izolat:
ir
Caz de utilizare
i operează un nivel jos din instrumentele la nivel de proiect. Este creat pentru scripturi individuale sau documente Quarto, mai degrabă decât pentru proiecte întregi. Este un instrument de linie de comandă pentru rularea scripturilor R portabile și redarea documentelor Quarto ale căror cerințe de pachet (și opțional o versiune R) trăiesc în interiorul fișierului însuși pentru fluxuri de lucru cu un singur fișier care nu au nevoie de un proiect, dar trebuie totuși să fie ușor de partajat și reluat mai târziu.
Cum se folosește ir
- Instalați ir:
Urmați instrucțiunile de instalare din depozit:
curl -fsSL https://raw.githubusercontent.com/r-lib/ir/main/scripts/install.sh | sh
- Declarați cerințele în fișierul în sine:
Adăugați frontmatter (pentru .qmd/.Rmd) sau un comentariu de antet (pentru .R scripturi) care listează pachetele și, opțional, o versiune R sau o dată instantanee a Managerului de pachete Posit:
#!/usr/bin/env -S ir run #| packages: #| - dplyr>=1.0 #| - (email protected) #| isolated: true #| exclude-newer: "2025-05-15" library(dplyr) library(ggplot2) mtcars |> count(cyl, gear) |> ggplot(aes(x = cyl, y = gear)) + geom_col()
---
title: My report
ir:
packages:
- dplyr>=1.0
- (email protected)
isolated: true
exclude-newer: 2025-05-15
---
- Rulați sau randați fișierul:
ir run script.R ir render report.qmd
Când rulați sau randați fișierul, rezolvă cerințele, pregătește biblioteci de pachete stocate în cache și lansează R sau Quarto cu un timp de rulare gata de utilizare.
Câteva considerații
este cel mai nou instrument de aici (lansat pentru prima dată la mijlocul anului 2026) și s-a restrâns în mod intenționat: rezolvă reproductibilitatea pentru o singur fișier, nu un proiect întreg. Deci, este o completare, nu un înlocuitor pentru, {renv}/{rix}/rv/uvr atunci când aveți nevoie de un mediu partajat la nivel de proiect.
Chiar mai mulți manageri de pachete și mediu
Aceasta este doar suprafața a ceea ce este disponibil acolo. Uimitoarea Novica Nakov a creat o nouă pagină web cu instrumente R pentru a urmări noile instrumente R pe măsură ce apar. Așadar, dacă doriți să urmăriți o listă în evoluție, vă recomand să fiți cu ochii acolo!
În timp ce îmi făceam cercetări, am dat peste câteva instrumente pe care m-am gândit să le adaug la această postare și am decis să nu le fac. Iată care sunt acestea și de ce le-am omis:
- devenv: un manager de mediu de dezvoltare bazat pe Nix de uz general, nu în mod specific pentru R. Împărtășește mecanismul de bază al lui {rix}, dar nu are subtilitățile specifice lui {rix} R, cum ar fi instantaneele CRAN/Bioconductor fixate cu data.
- rpx, pe care l-am descoperit pe acest thread Reddit în timp ce scriam asta: nu l-am adăugat pentru că m-am chinuit prea mult să termin această postare și mi-ar fi încurcat jocul Spelling Bee. Dacă cineva dorește să scrie despre asta pentru R Works, anunță-mă!
- rig: un instrument de linie de comandă pentru instalarea, listarea și comutarea între mai multe versiuni R pe mașina dvs. Nu l-am adăugat pentru că nu există nimic de împărtășit cu ceilalți (este mai degrabă un manager personal de versiune R), dar, așa cum am menționat mai devreme, poate fi folosit pentru a se conforma versiunilor R fixate urmărite în instrumente precum {renv} sau rv.
