O actualizare majoră la ggplot2 (versiunea 4.0.0) este de așteptat în jur La mijlocul lunii iulie 2025. Acesta aduce o schimbare internă semnificativă, înlocuind cea mai mare parte a backend -ului S3 cu noul sistem de obiecte S7. În timp ce acest lucru îmbunătățește întreținerea și extensibilitatea pe termen lung, poate rupe pachetele bioconductoare care depind ggplot2în special cele care personalizează modul în care parcelele sunt construite sau stilate. Pachete care utilizează ggplot2 pentru sarcini tipice de complot, cum ar fi crearea de comploturi cu ggplot() şi geom_*()este puțin probabil să fie afectat.
Tl; dr
ggplot24.0.0 este o actualizare internă majoră la clasele S7- Unele pachete de bioconductor se pot rupe, în special cele personalizate
ggplotTeme/geomuri - Afectează doar graficul – funcțiile statistice sau de modelare rămân neschimbate
- Dacă sunteți utilizator, mențineți actualizarea GGPLOT2 până când pachetele dvs. sunt confirmate pentru a funcționa
- Dacă sunteți dezvoltator, testați acum folosind
pak::pak("tidyverse/ggplot2")Pentru a pregăti înainte de eliberare - Întrebări sau probleme? Alătură -te la noi pe Zulip
Ce se schimbă?
Eliberarea 4.0.0 a ggplot2 Introduce un refactor intern major: clasele S3 sunt migrate către noul sistem S7. În timp ce majoritatea utilizatorilor nu vor observa diferența, unele pachete se bazează pe modul în care ggplot2 este construit intern, de exemplu, modificând temele, geomurile sau folosind funcții de ajutor. Aceste pachete (de ex ComplexUpset, ggtree, plotly) se poate rupe dacă această structură internă se schimbă.
Unele probleme pot fi minore, cum ar fi eșecurile testelor, în timp ce altele pot provoca erori de rulare. Oricum, acesta este un moment bun pentru a vă revizui utilizarea.
De ce S7?
S7 este un nou sistem orientat către obiecte în R, care face ca pachetele să fie mai robuste, previzibile și mai ușor de extins. Oferă dezvoltatorilor instrumente mai bune pentru gestionarea codului complex, dar trecerea la acesta poate afecta pachetele care se bazează pe modul în care lucrurile obișnuiau să funcționeze în sistemul vechi (S3).
Oferă:
- Definiții formale de clasă și metodă
- Expediere multiplă limitată
- Suport mai curat pentru interoperabilitate
- Consistență mai mare între pachete
S7 este dezvoltat de grupul de lucru OOP al consorțiului R, cu contribuabili de la R Core, Bioconductor, Posit și alții.
Aflați mai multe în postarea de pe blogul Tidyverse și pe site -ul S7 al consorțiului R.
Pentru dezvoltatori
Ce ar trebui să facă dezvoltatorii acum
Vă puteți testa pachetul împotriva versiunii de dezvoltare a ggplot2 folosind:
# install.packages("pak")
pak::pak("tidyverse/ggplot2")
Vă recomandăm testarea într -un mediu izolat folosind {renv} Pentru a evita interacțiunile neașteptate cu pachetele dvs. existente.
Dacă găsiți probleme:
Probleme comune deja raportate
- Verificări de clasă: Teste care se bazează pe structuri exacte de clasă precum
class(p)sauexpect_type(p, "list")acum poate eșua. În schimb, folosițiexpect_true(is_ggplot(p))sauexpect_s3_class(p, "ggplot")pentru compatibilitate. Vezi #6498. - Manipularea etichetelor: Etichetele sunt acum mai stricte și construite mai târziu în etapa de construire. Utilizare
get_labs()în teste și evitați argumentele fără nume sau duplicatelabs(). Vezi #6505. - Metode personalizate +: Pachete care definesc operatori personalizați + (de exemplu,
+.gg) poate avea nevoie să -și revizuiască implementarea, în special cu utilizarea mixtă a clasei S3/S7. Vezi #6504. - Proprietăți ale elementului nevalid: Cu adopția clasei S7, constructori de elemente precum
element_text()Acum impuneți verificări de tip mai stricte (de exemplu, nu este adevărat pentru familie, fără culori zecimale). Remediați proprietățile incorecte din pachetul dvs. Vezi #6507. - Consistența metodei S3: Generice ca
ggplot_build()şiggplot_add()acum include...Metodele dvs. trebuie să o includă, chiar dacă este neutilizată, pentru a evita avertismentele. Vezi #6515.
Acestea evoluează, dacă ceva pare rupt, merită să verificați pagina de probleme GGPLOT2 pentru actualizări înainte de a deschide una nouă.
Echipa de bază a bioconductorului a efectuat, de asemenea, teste automate pe un subset de pachete pentru a ajuta problemele să observe mai devreme. Datorită constrângerilor de resurse, aceasta acoperă în prezent doar o parte din ecosistem, așa că este încă important pentru dezvoltatori să -și testeze propriile pachete.
Modul în care pot fi afectate pachetele bioconductoare
Am compilat o listă de pachete din Bioconductor 3.21 care declară ggplot2 în Depends, Importssau Suggests:
Cod
library(BiocManager)
library(tidyverse)
library(reactable)
repos <- repositories(version = "3.21")
bioc_repos <- repos(grepl("BioC", names(repos)))
db <- available.packages(contrib.url(bioc_repos))
pkg_df <- as_tibble(db) %>%
mutate(
ggplot2_usage = case_when(
grepl("ggplot2", Depends) ~ "Depends",
grepl("ggplot2", Imports) ~ "Imports",
grepl("ggplot2", Suggests) ~ "Suggests",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(ggplot2_usage)) %>%
select(Package, ggplot2_usage) %>%
arrange(Package)
reactable(
pkg_df,
searchable = TRUE,
filterable = TRUE,
columns = list(
Package = colDef(name = "Package"),
ggplot2_usage = colDef(name = "ggplot2 Usage")
),
defaultSorted = "Package",
striped = TRUE,
bordered = TRUE,
highlight = TRUE,
defaultPageSize = 20,
showPageSizeOptions = TRUE,
compact = TRUE
)
Nota: Nu toate aceste pachete vor fi la fel de afectate. De fapt, multe pachete bioconductoare folosesc ggplot2 în moduri simple (de exemplu, pentru a crea parcele standard folosind ggplot() şi geom_*()), care este puțin probabil să se rupă. Pachetele cele mai expuse riscului sunt cele care definesc geom -uri personalizate, teme sau modifică intern ggplot2 comportament.
Un total de 985 de pachete în bioconductor 3.21 declară ggplot2 ca dependență: 91 în Depends722 in Importsși 172 în Suggests.
Pachete enumerate sub Depends sau Imports sunt mai susceptibili să folosească ggplot2 În funcționalitatea lor principală, astfel încât utilizatorii și dezvoltatorii pot vedea ruperea. Cele enumerate sub Suggests de obicei utilizați doar ggplot2 În exemple opționale sau viniete și poate să nu fie afectate decât dacă aceste caracteristici sunt rulate.
Pentru utilizatori
De ce acest lucru ar putea rupe codul dvs.
Bioconductor are două versiuni programate pe an, iar versiunile respective sunt fixate în mare parte odată lansate. Dar pachetele de cran precum ggplot2 Actualizați mai frecvent, iar aceste actualizări pot rupe ocazional pachetele bioconductor, mai ales dacă instalați noua versiune înainte ca pachetele Bioconductor să aibă șansa de a se adapta. În unele cazuri, dezvoltatorii își pot plasa pachetele în cadrul eliberării curente de bioconductor. Dar acest lucru nu este întotdeauna posibil, depinde de această problemă și dacă întreținerea are timp și capacitate de a se actualiza rapid.
Acest ggplot2 Actualizarea nu înseamnă că întreaga dvs. instalare se va rupe. În cele mai multe cazuri, doar unele funcționalități de complot ar putea înceta să funcționeze, sau parcele pot arăta diferite etichete sau teme care lipsesc.
Ce poți face
Dacă utilizați ggplot2fie direct, fie prin intermediul unui pachet bioconductor, această actualizare vă poate afecta.
Ruperea se poate întâmpla dacă tu:
- Alerga
update.packages() - Instalați un pachet Cran sau GitHub care atrage noul
ggplot2 - Utilizați un manager de pachete precum
{pak}Acest lucru actualizează automat dependențele
Pentru a evita perturbările:
- Rețineți actualizarea
ggplot2Până când ați testat că funcționează cu codul dvs. și pachetele pe care le utilizați. - Puteți testa deja cu versiunea de dezvoltare, vezi mai jos.
Dacă codul dvs. funcționează așa cum este de așteptat, nu trebuie să acționați imediat. Dar testarea înaintea eliberării CRAN vă poate oferi încredere că totul va continua să funcționeze o dată ggplot2 4.0.0 a ieșit.
Cum să verificați dacă sunteți afectat
Versiunea de dezvoltare a GGPLOT2 (4.0.0) este deja disponibilă pentru testare folosind {PAK}. Eliberarea CRAN este de așteptat la jumătatea lunii iulie. Dacă nu sunteți sigur dacă să vă actualizați odată ce a ieșit, iată cum puteți testa configurarea curentă înainte de timp.
- Creați un mediu temporar sau izolat folosind
{renv} - Instalați versiunea de dezvoltare a
ggplot2:
install.packages("pak")
pak::pak("tidyverse/ggplot2")
- Re-rulați codul și verificați că parcelele apar așa cum era de așteptat
Dacă se rupe ceva, puteți întotdeauna să vă întoarceți sau să vă mențineți la actualizare până la lansarea patch -urilor.
Instrumente de ajutor
Pentru a gestiona versiunile și a evita surprizele:
-
Utilizare
{renv}Pentru a instanta configurația dvs. curentă:# Create a reproducible project setup renv::init() renv::snapshot()
-
Când actualizați, utilizați:
update.packages(ask = TRUE)
Și ia în considerare sărituri ggplot2 Dacă nu ești sigur.
Note finale
Mulțumită tuturor celor care au testat, raportat sau au pachete patch -uri înainte de această versiune. Mulțumiri speciale Brandului Teun van den și celor ggplot2 Echipa pentru colaborarea lor proactivă și deschisă cu comunitatea bioconductoare.
Dacă mențineți un pachet folosind ggplot2 Și nu l -am testat încă, testarea acum vă poate ajuta utilizatorii și îi poate salva pe alții să se confrunte cu aceleași probleme.
Remedii pot dura timp pentru a se propaga, în special cu atât de multe pachete interdependente, precum și majoritatea întreținătorilor de bioconductori care contribuie alături de sarcini de lucru academice complete. Dar progresul este constant și a fost mai ușor atunci când oamenii semnalizează timpuriu.
Schimbări mari de genul acesta nu sunt întotdeauna lineze, dar comunicarea deschisă merge mult. Indiferent dacă mențineți un pachet, raportați o eroare sau doar urmăriți, totul vă ajută. Vă mulțumim pentru lectură și pentru a face parte din acest proces de colaborare.
© 2025 Bioconductor. Conținutul este publicat sub licență Creative Commons CC-BY-4.0 pentru licența de text și BSD 3-clauză pentru orice cod. | R-BLOGGERS
