library(learnr)
library(parsons)
library(knitr)
library(rio)
knitr::opts_chunk$set(echo = FALSE)
library(tidyverse)
library(skimr)

file.copy(from = system.file(package = "funcampR","data","chapitre3/recensement_agricole_statia_Tellus.ods"), 
          to = paste0(tempdir(),"/recensement_agricole_statia_Tellus.ods"))
file.copy(from = system.file(package = "funcampR","data","chapitre3/recensement_agricole_statia_Galia.ods"), 
          to = paste0(tempdir(),"/recensement_agricole_statia_Galia.ods"))
# relative path to data from "local random repo" of learnr exercise
fichier_tellus<-import(paste0(tempdir(),"/recensement_agricole_statia_Tellus.ods"))
fichier_galia<-import(paste0(tempdir(),"/recensement_agricole_statia_Galia.ods"))

Apprenons à conjuguer les sortilèges

Un bon mage est appelé à évoquer de multiples sortilèges, qu'il va combiner pour accroître son pouvoir. De même, dans la langue des Runes, les sortilèges peuvent se conjuguer les uns les autres, c'est-à-dire être associés dans un ordre qui vous permettra d'obtenir l'effet escompté. La conjugaison des sortilèges se fonde sur un étonnant symbole : le pipe (prononcez "paille-peu"), représenté par les lettres %>%. On l'invoque en juxtaposant %, > et % côte-à-côte.

knitr::include_graphics("images/symbole_pipe.png")

Le pipe est un opérateur qui facilite l'enchaînement de sortilèges sur un fichier de données. Le signe %>% peut être lu comme "ensuite". Ainsi, si on utilise cet opérateur :

skim(mon_fichier)
# EST EQUIVALENT A :
mon_fichier %>% skim()

Le sortilège se trouvant immédiatement à la droite du %>% utilise comme objet en entrée l'élement se trouvant à la gauche du %>%. En langue vernaculaire, cela donne: "Je prends mon fichier de données et ensuite je calcule les indicateurs statistiques sur l'ensemble des variables de ce fichier."

On peut également choisir de ne s'intéresser qu'à une seule des variables du fichier comme nous l'avions fait au chapitre précédent :

skim(mon_fichier,nom_variable)
# EST EQUIVALENT A :
mon_fichier %>% skim(nom_variable)

Si on traduit, cela donne: "Je prends mon fichier de données et ensuite je calcule les indicateurs statistiques sur la variable selectionnée dans ce fichier"

Un peu de pratique...

Continuons l'exploitation du fichier des fermiers Tellus et Galia avec le sortilège skim() :

# Le livre de récolte est déjà chargé, avec le nom fichier_tellus

# En utilisant le %>% et le sortilège skim(), 
# calculer les statistiques descriptives sur toutes les variables 


# fin de l'exercice
# Le livre de récolte est déjà chargé, avec le nom fichier_tellus

# En utilisant le %>% et le sortilège skim(), 
# calculer les statistiques descriptives sur toutes les variables 
fichier_tellus %>% skim()

# fin de l'exercice

Et maintenant passons au fichier du fermier Galia :

# Le livre de récolte est déjà chargé, avec le nom fichier_galia

# En utilisant le %>% et le sortilège skim(), 
# calculer les statistiques descriptives sur la variable Litres


# fin de l'exercice
# Le livre de récolte est déjà chargé, avec le nom fichier_galia

# En utilisant le %>% et le sortilège skim(), 
# calculer les statistiques descriptives sur la variable Litres
fichier_galia %>% skim(Litres)

# fin de l'exercice

Le secret de Galia ?

Grace à Icarius, le conflit est résolu, et l'humble Galia est désormais reconnu comme le meilleur cultivateur de Mandragore. Tous sont maintenant curieux de connaitre le sortilège utilisé par Galia pour y arriver. Utiliserait-il les produits de la magie noire (qu'on appelle les biotues dans le monde agricole de Statia) ?

"Vous n'y êtes pas, chers compagnons. Voyons, il est temps pour moi de partager ma recette avec vous".

Dans le monde de Statia, le pipe permet de produire des enchainements de sortilèges... comme de composer toutes les étapes d'une recette. Mais attention : pour qu'une recette soit un succès, encore faut-il suivre les étapes dans le bon ordre. Il en va de même pour un bon sortilège...

Imaginez Sylvain, un cuisinier du dimanche qui veut faire du pain, voilà la recette telle qu'il la trouvera sur maRmiton, la célèbre bibliothèque de cuisine : prends la farine, ensuite ajoute le sel, ensuite ajoute la levure, ensuite ajoute l'eau, ensuite mélange le tout, ensuite laisse reposer la pate réalisée, enfin met au four pendant 13 minutes à 240°C.

En langage des Runes, la même recette s'écrira de la façon suivante :

farine %>% 
  ajouter(sel) %>% 
  ajouter(levure) %>% 
  ajouter(eau) %>% 
  melanger() %>% 
  laisser_reposer() %>% 
  mettre_au_four(température = 240°C,temps = 13minutes)

Le sortilège invoqué dans le langage des Runes comme une transcription littérale de la recette moyennant l'utilisation du %>%

De l'art de bien cultiver sa Mandragore...

Vous avez compris la magie du pipe ? A vous de jouer !

Tellus a bien fourni son secret, mais dans le désordre. Recomposons les étapes comme il convient. Voici quelques indices :

Saurez-vous remettre les étapes dans l'ordre ?

question_parsons(
  initial = c(
    "champ %>%",
    "data champ;set champ;run;",
    "semer() %>%",
    "arroser() %>%",
    "ajouter(coccinelles) %>%",
    "labourer() %>%",
    "ajouter(biotues) %>%",
    "recolter()"
  ),
  pass_if(
    c(
    "champ %>%",
    "labourer() %>%",
    "semer() %>%",
    "arroser() %>%",
    "ajouter(coccinelles) %>%",
    "recolter()"
    ),
    message = "Bravo vous êtes des champions de la culture de la mandragore! Rentrez le code 777 dans le jeu icaRius pour continuer l'aventure"
  ),
    pass_if(
    c(
    "champ %>%",
    "labourer() %>%",
    "semer() %>%",
    "ajouter(coccinelles) %>%",
    "arroser() %>%",
    "recolter()"
    ),
    message = "Bravo vous êtes des champions de la culture de la mandragore! Rentrez le code 777 dans le jeu icaRius pour continuer l'aventure"
  ),
    pass_if(
    c(
    "champ %>%",
    "labourer() %>%",
    "ajouter(coccinelles) %>%",
    "semer() %>%",
    "arroser() %>%",
    "recolter()"
    ),
    message = "Bravo vous êtes des champions de la culture de la mandragore! Rentrez le code 777 dans le jeu icaRius pour continuer l'aventure"
  ),
  fail_if(
    ~length(.) < 2,
    message = "Inclure au moins deux verbes"
  ),
  fail_if(
    ~{.[1] != "champ %>%"},
    message = "Votre solution doit commencer par 'champ %>%'"
  )
)

Vous avez trouvé ? L'exercice ci-dessus vous apportera la réponse à reporter dans le jeu icaRius

version 0.9.3



InseeFrLab/funcamp-r-grimoire documentation built on Oct. 30, 2023, 3:25 p.m.