L’objectif de ce document est de décrire les différentes méthodes de développement d’applications internet avec R. Les 2 stratégies les plus utilisées sont expliquées:
- la librairie Shiny: https://shiny.rstudio.com/
- la librairie OpenCPU: https://www.opencpu.org/
https://forgemia.inra.fr/gdtpyr/gdt_pyr/-/tree/main/GDT_PyR9_devAppWeb
Shiny
Méthode
Développer une application web avec Shiny est très simple et ne demande pas de connaissance particulière en programmation web. La documentation du site est très explicite et présente de nombreux exemples. L’utilisateur peut s’inspirer des exemples pour son propre projet et récupérer des codes qu’il peut facilement adapter:
https://shiny.rstudio.com/gallery/
Les librairies suivantes sont des extensions de Shiny et permettent de créer des applications web de type dashboard
La structure d’une application shiny se compose au minimum de 2 fichiers:
- ui.R: contient le visuel de l’application, les icones, les boutons, les boites, le panel interactif où l’utilisateur peut faire des choix et le panel permettant de visualiser les résultats mis à jour.
- server.R: contient le code de l’analyse et l’interactivité entre les choix fait par l’utilisateur sur l’interface web et le code.
un exemple basique : https://shiny.rstudio.com/gallery/kmeans-example.html
Architecture d’une app Shiny un peu plus complexe, tout bien rangé :-):
Avantages
- facile à implémenter: pas de connaissance d’autres langages que R et les mots-clés spécifiques à Shiny
- pour une appli simple: structure simple et facile à maintenir
- très facile à implémenter et déployer avec Rstudio sur un poste
- bon ecosytème
- appel en bash facile sous windows ou linux…
Inconvénients
Pour des applis prévues pour de nombreux utilisateurs, nécessité de passer au déploiement sur serveur:
- coût élevé pour une version professionelle (nécessaire pour avoir plusieurs utilisateurs)
- difficulté de déploiement du serveur
- pb de sécurité si déploiement personnel
Passage à l’échelle de Shiny
Shiny proxy
Déployer des applications shiny sans avoir à gérer son propre serveur R… des connaissances Docker à avoir.
openCPU
Méthode
Contrairement à shiny, openCPU demande à l’utilisateur de connaître les langages de programmation web classiques: javascript et HTML. en effet, l’utilisateur doit créer l’interface graphique (en HTML) et créer l’interactivité entre interface et analyse avec javascript.
La création d’une appli web openCPU requiert une structure sous forme de package R, très spécifique:
Pour créer cette structure plusieurs packages sont à installer dans R: protolite, rappdirs, opencpu et unix.
- Par la suite dans un script R, présent dans le dossier R l’utilisateur doit écrire sa fonction. Elle va réaliser le calcul et produire des données souhaitées.
- Le fichier HTML présente le rendu de la page avec éventuellement des paramètres à renseigner (formulaire) pour pouvoir exécuter le code R. La fonction ocpu.seturl() permet de faire la connection entre les fichiers d’application (html et js) et le serveur OpenCPU.
- Les fichiers Javascript permettent de faire la connection entre la page HTML et le serveur OpenCPU. Un client OpenCPU.js va appeler la fonction de calcul présente dans le package et lui fournir les paramètres qui ont été renseignés par l’utilisateur sur la page HTML.
Après avoir créé son package, on peut la déployer sur son ordinateur avec la fonction opencpu::ocpu_start_server(). Elle peut être testée avant d’être mise sur un serveur de production. Cette dernière va permettre d’obtenir l’adresse pour avoir accès à l’application.
Avantages
- Structure très stable, programmation propre facile à maintenir
- Déploiement du serveur stable
- Personnalisation complète de son application web indépendamment d’une technologie spécifique
- Gestion personnalisé de la réception des données
Inconvénients
- requiert de maitriser au minimum 3 langages: R, HTML et javascript (sauf si on recupère un package-app_ déjà écrit et on modifie juste le code R…)
- déploiement du serveur complexe (plus simple en utilisant Docker pour le déploiement automatisé du serveur)
- développement à 2 mains (Double compétence - Web et Analyse)…
Session Informations
## R version 4.1.3 (2022-03-10)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
## [3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
## [5] LC_TIME=French_France.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] DiagrammeR_1.0.9
##
## loaded via a namespace (and not attached):
## [1] bookdown_0.25 visNetwork_2.1.0 digest_0.6.29 R6_2.5.1
## [5] jsonlite_1.8.0 magrittr_2.0.3 evaluate_0.15 blogdown_1.9
## [9] stringi_1.7.6 rlang_1.0.2 cli_3.2.0 rstudioapi_0.13
## [13] jquerylib_0.1.4 bslib_0.3.1 rmarkdown_2.14 RColorBrewer_1.1-3
## [17] tools_4.1.3 stringr_1.4.0 htmlwidgets_1.5.4 glue_1.6.2
## [21] xfun_0.30 yaml_2.3.5 fastmap_1.1.0 compiler_4.1.3
## [25] htmltools_0.5.2 knitr_1.39 sass_0.4.1