plotly failures with dev rlang
Nessuno ha ancora preso questa issue.
- Lingua principale
- R
- Stelle
- 2.7k
- Fork
- 641
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
I'm seeing failures for plotly with dev rlang:
Running ‘testthat.R’
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library("testthat")
> library("plotly")
Loading required package: ggplot2
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
...
Expected `legend_title` to match regexp "factor\\(cyl\\)$".
Actual text:
✖ │ factor(cyl)<br />factor(vs)
[ FAIL 2 | WARN 23 | SKIP 63 | PASS 1449 ]
Deleting unused snapshots: 'ggplot-contour/contour.svg' and
'ggplot-heatmap/heatmap.svg'
Error:
! Test failures.
Execution halted
Claude traced this to rlang::hash() producing different hashes in the new version (which was deliberate to fix other stability issues see https://github.com/r-lib/rlang/issues/1681#issuecomment-4267291605):
The chain is:
1. rlang dev changed hash() values (commit 229db8154 — "Stable hash()"). The NEWS says: "with this version all hash values will now be different". This is intentional for cross-R-version
stability.
2. ggplot2's Guides$merge sorts by hash. In Guides$merge(), each guide gets a key {order}_{hash} and then split(pairs, hashes) is called. R's split() returns groups in alphabetical order
of factor levels. So the final guide order depends on the alphabetical sort of the hash strings.
3. plotly concatenates guide titles in order. At ggplotly.R:1071-1072:
legendTitles <- compact(lapply(gdefs, function(g) if (inherits(g, "legend")) g$title else NULL))
legendTitle <- paste(legendTitles, collapse = br())
4. The plotly test asserts a specific order (test-ggplot-legend.R:32-33):
expect_match(legend_title, "^factor\\(vs\\)") # vs first
expect_match(legend_title, "factor\\(cyl\\)$") # cyl last
With CRAN rlang, the hashes sort as 99_124c... (vs) < 99_4d3... (cyl) → title = factor(vs)<br />factor(cyl).
With dev rlang, the hashes sort as 99_aefe... (cyl) < 99_ebf7... (vs) → title = factor(cyl)<br />factor(vs).
I've talked to the ggplot2 maintainers and they recommend using the order argument to make guide placement deterministic. Claude also suggests this fix (unverified):
diff --git a/tests/testthat/test-ggplot-legend.R b/tests/testthat/test-ggplot-legend.R
index 9dd92ea..d1d97e5 100644
--- a/tests/testthat/test-ggplot-legend.R
+++ b/tests/testthat/test-ggplot-legend.R
@@ -29,8 +29,8 @@ test_that("Discrete colour and shape get merged into one legend", {
nms, paste0("(", d$vs, ",", d$cyl, ")")
)
legend_title <- info$layout$legend$title$text
- expect_match(legend_title, "^factor\\(vs\\)")
- expect_match(legend_title, "factor\\(cyl\\)$")
+ expect_match(legend_title, "factor\\(vs\\)")
+ expect_match(legend_title, "factor\\(cyl\\)")
})
As a heads up, I'm planning to release this rlang update within the next two weeks.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Il fallimento è coperto da tests/testthat/test-ggplot-legend.R e i titoli delle guide vengono assemblati in ggplotly.R intorno alle righe 1071-1072. Inizia eseguendo il test che fallisce con la versione dev di rlang e analizza come viene determinato l’ordine delle guide. Il lavoro è completato quando il test del titolo della legenda passa con un ordinamento deterministico nella versione aggiornata di rlang.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- r
- Ambito
- data-visualization, testing
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 55/100