Tutoriel Shiny
Partie 1: Introduction

Lise Vaudor

janvier 2021

Shiny: qu’est-ce que c’est?

Shiny, c’est un package R qui facilite la construction d’applications web interactives depuis R.

Les utilisateurs peuvent simplement manipuler une application “clique-boutons” pour exécuter et afficher des résultats fournis par du code R.

Vous avez tout un tas d’exemples d’applis Shiny ici, dans la Shiny gallery.

Remarquez que toutes ces applications (qui, de fait, s’affichent dans votre navigateur internet) sont (surprise!) écrites en html et JavaScript… Par contre, on peut les produire sans connaître du tout (surprise surprise!!) ces langages.

En effet, elles peuvent être produites exclusivement via le langage R. (Même si une connaissance de html et css reste un plus pour produire de jolies apps…).

Shiny: qu’est-ce que c’est?

Une Shiny App se structure en deux parties:

Structure d’une appli: input et output

Une Shiny App se structure en deux parties:

Structure d’une appli: server et ui

Une Shiny App se structure en deux parties:

Structure d’une appli: global

Les commandes du fichier global.R sont exécutées dans un environnement… global. C’est-à-dire que les packages qu’on y charge ou les objets qu’on y crée seront disponibles à la fois pour les parties UI et Server.

Les commandes de global sont donc exécutées une bonne fois pour toutes (c’est-à-dire, une fois par session, et avant toute autre chose) au lancement de la Shiny App.

Fonctionnement d’une appli : noms réservés

Les noms de fichiers “app.R”,“server.R”,“ui.R” sont des noms réservés aux applis Shiny.

Grâce à eux, RStudio reconnaît une app. Ainsi, le bouton Run App apparaît en haut à droite de la partie “script” de l’interface RStudio. Ce bouton permet de construire (et tester) l’appli.

⚠️ Par conséquent: une seule app Shiny par dossier!!

Fonctionnement d’une appli: déploiement à distance

Quand vous construisez et testez votre app, l’ordinateur qui affiche l’interface =l’ordinateur qui effectue les calculs (car dans ce cas, l’utilisateur = le développeur = vous).

En revanche, si vous souhaitez que votre app soit utilisable par un autre utilisateur que vous même, vous pouvez procéder de deux manières:

Dans le premier cas, il faut que l’utilisateur soit capable de (et disposé à) enregistrer cette app sur son ordinateur, installer R si besoin, et lancer l’application depuis R. Sauf si votre interlocuteur connaît bien R, ce n’est pas très pratique… Dans le deuxième cas (déploiement sur un serveur distant) l’utilisateur n’a ni besoin d’avoir R sur son ordinateur, ni de savoir comment R fonctionne (il a juste besoin d’internet et du lien vers votre appli!). En fait, il peut utiliser l’appli sans avoir aucune conscience qu’il y a du R derrière…

Dans le cas où vous déployez votre app sur un serveur distant, cela veut dire qu’il y a une gentille structure qui vous “offre” gratuitement de la puissance de calcul sur son serveur… Cela n’est donc pas, généralement, totalement gratuit et/ou totalement illimité…

On se lance: avec un exemple simple

Pour construire votre première appli Shiny, vous pouvez vous aider du modèle (“template”") fourni par RStudio, en faisant:

File -> New project -> New directory -> Shiny web application.

OU

File -> New file -> Shiny App

Selon votre choix, un fichier (app.R) ou deux fichiers (server.R et ui.R) sont créés.

On se lance: structure de l’appli

Deux structures de base sont possibles pour les apps: soit avoir tout réuni dans un même script (app.R) soit séparer la partie ui et la partie server dans deux fichiers (ui.R et server.R). C’est cette deuxième solution que nous allons privilégier.

Dans l’exemple de gauche, ui est un objet de type UI issu de l’appel à une fonction -ici, fluidPage()-.

Les différents éléments passés à fluidPage() sont donc des arguments (i.e. ils sont séparés par des virgules!).

Au contraire, dans server on définit une fonction, ayant pour arguments input et output.

Le corps de cette fonction s’écrit donc comme une suite de lignes de commandes (i.e. les commandes sont séparées par des retours à la ligne!)

On se lance: organisation des fichiers

Le répertoire qui contient votre application doit être construit d’une manière qui facilite son déploiement sur un serveur distant. Le mieux ainsi d’avoir:

On se lance: commandes relatives aux inputs/outputs:

ui:

server:

On se lance: commandes relatives aux inputs/outputs

ui:

server: