4 min read

GdT-Pyr 9 - Developpement d'applications avec R

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:

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

feuille de triche

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

server.R

ui.R

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

Scale Shiny

Shiny proxy

https://www.shinyproxy.io/

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