-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextensionShiny.Rmd
239 lines (168 loc) · 8.21 KB
/
extensionShiny.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
---
title: "Packages des nouveautés pour Shiny"
author: "State of the R - Aurélie, Cédric et Isabelle"
date: '2022-08-24'
output:
html_document:
toc: yes
toc_float: true
---
# Objectif
Cette page présente quelques packages permettant d'améliorer
l'utilisation de Shiny, en terme de validation/test de code, aide à la
création d'UI, ajouts de nouvelles fonctionnalités...
# Validation entrées clavier utilisateurs
## fomantic.plus
<https://github.com/ashbaldry/fomantic.plus>
`fomantic.plus` est un package permettant de contrôler et valider les
entrées clavier d'un utilisateur sur une application shiny. Il est
disponible sur github mais pas sur le CRAN pour le moment. En cours de
développement, il serait intéressant à suivre...
## shinyvalidate
`shinyvalidate` est un package disponible sur le CRAN, en version en
cours de maturation, développé par Rstudio. Il permet comme
`fomantic.plus` de valider les entrées clavier de l'utilsateur.
<https://rstudio.github.io/shinyvalidate/>
# shinytest2
<https://rstudio.github.io/shinytest2/>)
L'objectif de `shinytest2` est de tester les sorties d'une application
shiny en utilisant `testthat` et est développé par Rstudio. Une ancienne
version du package était disponible depuis 2018 (`shinytest`) mais
reposant sur une technologie n'étant plus maintenue a été totalement
refondue en `shinytest2`.
`shinytest2`est disponible sur le CRAN mais est toujours en
développement donc attention aux évolutions à suivre...
`shinytest2` permet d'enregistrer à la volée les tests à appliquer à une
application Shiny puis à comparer les captures d'écran en résultant.
**RStudio** permet d'utiliser facilement `shinytest2`en proposant des
boutons d'execution et de récupération des sorties des tests.
Les principales fonctions de `shinytest2` sont:
* `record_test()`
* `test_app()`
`record_test()` se déroule en 2 étapes:
* **Etape 1**: Lancer l'application via la fonction `record_test()`,
intéragir avec l'appli et enregistrer des captures (écrans ou autre)
aux moments choisis.
2 sortes de "captures":
- soit captures de valeurs attendues: inputs, outputs et exported values (= reactive() dans shiny) avec le bouton *Expect Shiny values*
- soit des captures écran de l'appli avec le bouton *Expect screenshot*
Code généré sous la forme de tests (`testthat`) et captures enregistrées
en local.
* **Etape 2**: Si des modifications sont apportées, lors du lancement,
le code test reproduit le comportement sur l'appli et vérifie que
les captures actuelles correspondent aux captures initiales.
- captures d'écran: comparaison via `testthat::compare_file_binary()`
- valeurs attendues: comparaison des .json
```{r,eval=FALSE}
library(shinytest2)
test_that( "{shinytest2} recording: test-shiny", {
app <- AppDriver$new(variant = platform_variant(), name = "test-shiny",
height = 746, width = 1235)
app$set_inputs(x= character(0))
app$set_inputs(x = 9)
app$set_inputs(z = 10)
app$set_inputs(y = 9)
app$set_inputs(y = 8)
app$expect_screenshot()
app$set_inputs(y = 9)
app$set_inputs(y = 10)
app$set_inputs(y = 11)
app$set_inputs(y = 12)
app$set_inputs(y = 13)
app$set_inputs(y = 14)
app$expect_values() })
# ==> Testing R file using 'testthat'
# Le chargement a nécessité le package : shiny
# ══ Testing test-shinytest2.R ═══════════════════════════════════════════════
# [ FAIL 0 | WARN 0 | SKIP 0 | PASS 0 ]
# [ FAIL 0 | WARN 0 | SKIP 0 | PASS 1 ]
# [ FAIL 0 | WARN 0 | SKIP 0 | PASS 2 ] Done!
# Test complete
```
# shinymeta
<https://rstudio.github.io/shinymeta/>
`shinymeta` est un package disponible sur le CRAN, expérimental
(attention aux évolutions). Il permet de capturer l'historique d'un
objet shiny et de générer le code pour recréer les résultats produits
par l'utilisateur. Il peut aussi être utilisé pour générer des rapports
rmarkdown à partir des inputs de l'utilisateur (reproductibilité).
# Packages pour améliorer le visuel de UI
- [shinydashboardPlus](https://rinterface.github.io/shinydashboardPlus/):
package disponible sur le CRAN en version stable, permettant
d'ajouter des fonctionnalités aux dashboards classiques.
- [shinyWidgets](https://dreamrs.github.io/shinyWidgets/): package
disponible sur les CRAN permettant d'améliorer le visuel des widgets
des applis.


# Editeurs d'UI
## shinyuieditor
`shinyuieditor` est un package très récent, encore en version alpha en
cours de développement (par Rstudio) qui permet d'aider à la création de
la partie UI d'une application, sans écriture de code:
<https://rstudio.github.io/shinyuieditor/index.html>.
une présentation du créateur du package:
<https://nickstrayer.me/rstudioconf2022/#/section-6>
Ce package se focalise uniquement sur la partie UI et ne gère pas du
tout la création de la partie serveur de l'appli.
<https://rstudio.github.io/shinyuieditor/articles/how-to.html>
https://rstudio.github.io/shinyuieditor/articles/ui-editor-live-demo.html
## designer
`designer` est également un package permettant de créer des UI
d'applications Shiny en "clique-boutons", disponible sur le CRAN, en
version expérimentale mais semblant plus stable que `shinyuieditor`.
- <https://ashbaldry.github.io/designer/>
- <https://github.com/ashbaldry/designer>
- <https://cloud.r-project.org/web/packages/designer/index.html>
# esquisse
`esquisse` n'est pas vraiment un package pour shiny mais une app pour
créer des ggplot2 interactivement avec ses données:
<https://dreamrs.github.io/esquisse/>. Cet addin permet d'explorer ses
données en les visualisant avec `ggplot2` et en testant différents
façons de les représenter. Il est alors possible de récupérer le code
permettant de créer les graphs.

# golem
<https://thinkr-open.github.io/golem/>
<https://thinkr.fr/introduction-au-package-golem-en-video/>
`golem` est un framework de construction et packaging d'applications
shiny. Il permet de construire, tester, déployer une appli avec une
structure de package: plus couteux en développement mais surement plus
robuste.
L'architecture des applications est basée sur les **shiny modules**:
- <https://emilyriederer.netlify.app/post/shiny-modules/>
- <https://mastering-shiny.org/scaling-modules.html>
- <https://shiny.rstudio.com/articles/modules.html>
# reactlog
<https://rstudio.github.io/reactlog/>
`reactlog`est un package, disponible sur le CRAN permettant de suivre la
réactivité et les interactions entre les éléments et faciliter le
débugage de l'application.
Il produit un graph de dépendence de réactivité qui permet au
développeur de naviguer dans l'hstorique des éléments réactifs.
Visualiser l'arbre permet de chercher des erreurs mais également de le
simplifier pour optimiser le code.

# Shiny for Python
Un nouveau concurrent de Dash sur Python, évidemment développé par
Rstudio: <https://shiny.rstudio.com/py/>
Attantion, pour le moment, **Shiny for Python** est en version alpha,
potentiellement instable et en cours d'évolution. Ils recommandent de ne
pas l'utiliser pour des applications à déployer en production.
<https://shinylive.io/py/examples/#app-with-plot>
# Quelques autres extensions
Une liste très complète d'extensions de Shiny répertoriée Nan Xiao:
https://github.com/nanxstats/awesome-shiny-extensions
# Références
- <https://rstudio.github.io/shinytest2/>
- <https://rstudio.github.io/shinymeta/>
- <https://rinterface.github.io/shinydashboardPlus/>
- <https://dreamrs.github.io/shinyWidgets/>
- <https://rstudio.github.io/shinyuieditor/index.html>
- <https://ashbaldry.github.io/designer/>
- <https://github.com/ashbaldry/fomantic.plus>
- <https://rstudio.github.io/shinyvalidate/>
- <https://dreamrs.github.io/esquisse/>
- <https://shiny.rstudio.com/py/>
- <https://thinkr-open.github.io/golem/>
- <https://rstudio.github.io/reactlog/>