knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

Lifecycle: experimental

Mazars Reserving Tool (triangle.tlbx)

Installation

<!-- You can install the experimental version from github :

remotes::install_github("MehdiChelh/triangle.tlbx")

-->

Outils requis (Requirements)

Résumé :

  1. R de préférence en version 3.6.1
  2. RStudio

Détail :

Le guide d'installation ci-dessous pré-suppose R et RStudio déjà installés. La version de R actuellement utilisée sur le serveur est la version 3.6.1, disponible ici. Il est donc préférable de passer par cette version pour travailler sur le projet.

Téléchargement du projet

alt textTéléchargement du projet depuis Gitlab

NB. - Il est préférable de télécharger/déziper le projet dans un répertoire dont le chemin ne contient pas d'espaces ou de caractères tels que "&", "|", ou "$". (liste potentiellement non exhaustive... A voir).

Installation des dépendances

Résumé :

  1. Ouvrir le projet dans RStudio (fichier triangle.tlbx.Rproj)
  2. Lancer l'instruction packrat::restore() pour installer les dépendances
  3. Compiler l'application : Ctrl + Shift + B ou Build > Install and Restart dans le menu de RStudio
  4. Lancer l'instruction triangle.tlbx::run_app() pour vérifier que l'installation s'est correctement déroulée

Détail :

Le projet utilise le package packrat qui permet de gérer automatiquement les dépendance du projet et de les installer dans le dossier ./packrat/lib sans modifier les packages déjà installés avec votre installation de R.

Pour ouvrir le projet dans RStudio, double-cliquer sur le fichier triangle.tlbx.Rproj à la racine du projet. A l'ouverture du projet, vous devriez obtenir une sortie similaire à la sortie suivante :

R version 3.6.1 (2019-07-05) -- "Action of the Toes"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

Packrat is not installed in the local library -- attempting to bootstrap an installation...
> No source tarball of packrat available locally
> Installing packrat from CRAN
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.6/packrat_0.5.0.zip'
Content type 'application/zip' length 457428 bytes (446 KB)
downloaded 446 KB

package ‘packrat’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    d:\Users\mehdi.echchelh\AppData\Local\Temp\RtmpCgY74l\downloaded_packages
Packrat mode on. Using library in directory:
- "~/1_RD/Code/triangle.tlbx/packrat/lib"

Pour installer les packages nécessaires au projet il suffit alors d'utiliser la fonction restore de packrat :

> packrat::restore()

L'installation peut durer environ 20 minutes.

Une fois l'installation des packages terminée vous pouvez alors compiler (Ctrl + Shift + B ou Build > Install and Restart dans le menu de RStudio) puis lancer l'application :

> library(triangle.tlbx)
> run_app()

alt text

Développement

Compiler et lancer l'application

  1. Compiler : Ctrl + Shift + B ou Build > Install and Restart
  2. Lancer : triangle.tlbx::run_app()

Lancer l'application en mode dévloppement

Le mode "développement" permet de ne pas avoir à recompiler le package.

  1. Lancer : source("./dev/run_dev.R")

Attention : pour que cette option marche il faut que le working directory soit celui du projet.

Rappel : on peut vérifier le working directory via l'instruction getwd() et le paramétrer via setwd(<chemin vers le projet>).

Architecture du code

Cette partie suppose que le lecteur a certaines notions de la librairie shiny et en particulier des modules shiny.

Mettre des schémas ici

Corriger le schéma sur la partie bootstrap

Front-End & Back-End

Le code est structuré selon une partie client ou front-end et une partie backend :

alt text

Les parties client et backend sont chacunes décomposées en modules.

Pour le client comme pour le backend chaque module est en fait un shiny module tel que défini dans la documentation rajouter lien. Cependant on notera que, pour les modules backend, la fonction ui n'est utilisée.

Modules du Front-End

Actuellement l'arborescence des modules / sous-modules de la partie front-end peut être représentée par le schéma suivant :

alt text

En plus de ces modules, on note certains modules additionnels, indépendant du reste de l'application :

Modules du Back-End

Pour la partie backend, les modules définis actuellement sont les modules :

Actuellement, les fichiers du backend sont ceux se terminant par "com". Cependant la convention qui sera utilisée par la suite sera probablement de les renommés en "com*" (exemple : "com_bootstrap").

La communication entre frontend et backend se fait par le biais d'un "espace mémoire" partagé entre le backend et le frontend. Le frontend peut intéragir avec cet espace via les fonction setInput et get, tandis que le backend peut intéragir avec via les fonction getInput, get et set.

Exemple:

Supposons que l'on ait un module frontend avec un input de type selectInput pour choisir le jeu de donnée sur lequel appliquer Chain Ladder, et un module backend nommé chainladder calculant une variable link_ratio correspondant aux facteurs de développement de Chain Ladder.

On aura alors dans le code de la partie frontend :

# Partie frontend
# -----------
# On met la valeur de l'input utilisateur dans l'espace partagé
observe({
  setInput("chainladder", "triangle", { 
    input[["triangle-select"]] # input renseigné par l'utilisateur
  })
})

# On récupère le résultat calculé par la partie backend et on l'affiche dans un tableau
output[["link_ratio-table"]] <- renderTable({
  req(get("chainladder", "link_ratio")) # pour éviter d'exécuter la suite du code si la variable n'est pas encore définie

  get("chainladder", "link_ratio")
})
# Partie backend - Module "chainladder"
# -----------
# On calcule le résultat et on le met dans l'espace partagé.
observe({
  set("link_ratio", {
    req(getInput("triangle")) # pour éviter d'exécuter la suite du code si la variable n'est pas encore définie

    triangle <- getInput("triangle"))
    # .... calculs à insérer
    link_ratio
  })
})

Chaque module de backend possède quatre fonctions/méthodes :

alt text

Fichiers et fonctions auxiliaires



MehdiChelh/triangle.tlbx documentation built on May 18, 2020, 3:14 a.m.