HTML documents including plotly plots are not reproducible
Personne n'a encore pris cette issue.
- Langage dominant
- R
- Étoiles
- 2.7k
- Forks
- 641
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
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:
However, this breaks the plot. Any way I can make this work?p <- plotly::plot_ly(x = 1, y = 1) p$x$attrs <- NULL # and a few more p - I have also tried putting this inside
bug.Rmd:
butshiny::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" ) } )rmarkdown::render()seemed to ignore it, even insideshinytest(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().
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez le problème avec bug.Rmd et R -q -s -e 'rmarkdown::render("bug.Rmd")', puis comparez la valeur de cur_data dans bug.html entre plusieurs rendus. Consultez la logique référencée dans R/shiny.R et R/utils.R, ainsi que les issues associées #1048, #1379 et #1365. Le travail est terminé lorsque les documents HTML rendus avec rmarkdown::render() produisent des données de graphique reproductibles sans casser le graphique.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, r
- Domaine
- data-visualization, web-dev
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100