plotly / plotly/plotly.R

HTML documents including plotly plots are not reproducible

Aperta
#2,074 1 commento 1 reazione 0 assegnatari Vedi su GitHub

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 believe it is known that the value of plotly::plot_ly(x = 1, y = 1)$x$cur_data is hard to reproduce, compare https://github.com/plotly/plotly.R/issues/1048. Some work has been done in #1379 towards use in shinytest at least.

I am also using shinytest, but in my app, users are downloading HTML files with plotly plots generated using rmarkdown::render(). So these files are still non-reproducible because I cannot seem to use renderPlotly() inside rmarkdown::render(). To see the problem:

bug.Rmd:

---
output: html_document
---

```{r}
plotly::plot_ly(x = 1, y = 1)
```

Then run R -q -s -e 'rmarkdown::render("bug.Rmd")' and see the value of cur_data in bug.html change every time you regenerate it.

I see two options:

  • I could replicate the logic of
    https://github.com/plotly/plotly.R/blob/bab01af316673e35d8314129178bfb27eed27fe7/R/shiny.R#L46-L53
    inside bug.Rmd, like this:
    p <- plotly::plot_ly(x = 1, y = 1)
    p$x$attrs <- NULL # and a few more
    p
    
    However, this breaks the plot. Any way I can make this work?
  • I have also tried putting this inside bug.Rmd:
    shiny::snapshotPreprocessOutput(
      plotly::plot_ly(x = 1, y = 1),
      function(value) {
        # https://github.com/plotly/plotly.R/blob/3d49fbc5897703d58b/R/shiny.R#L68
        json <- jsonlite::from_JSON(value)
        json$x <- json$x[setdiff(names(json$x), c("visdat", "cur_data", "attrs"))]
        # https://github.com/plotly/plotly.R/blob/3d49fbc589/R/utils.R#L1020-L1025
        jsonlite::toJSON(json,
          digits = 50, auto_unbox = TRUE, force = TRUE,
          null = "null", na = "null", time_format = "%Y-%m-%d %H:%M:%OS6"
        )
      }
    )
    
    but rmarkdown::render() seemed to ignore it, even inside shinytest (or did I do anything wrong there)?
  • One could amend #1365 to take into account a hash of the current plot serialization to avoid generating identical IDs even if the external seed is reset to the same values externally. This would avoid the need for tempfile().

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con bug.Rmd e R -q -s -e 'rmarkdown::render("bug.Rmd")', quindi confronta il valore di cur_data in bug.html tra più rendering. Leggi la logica indicata in R/shiny.R e R/utils.R, insieme alle issue correlate #1048, #1379 e #1365. Il lavoro è completato quando i documenti HTML renderizzati con rmarkdown::render() producono dati del grafico riproducibili senza compromettere il grafico.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, r
Ambito
data-visualization, web-dev
Tipo di issue
Bug
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.