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

Let's learn to combine spells

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"

Let's practice...

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

Galia's secret ?

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 %>%

The art of cultivating Mandrake ...

Did you understand the magic of the pipe? It's your turn !

Tellus did provide his secret, but out of order. Let's recompose it step by step. Here are some clues:

Can you put the steps back in order?

question_parsons(
  initial = c(
     "field %>%",
     "data field; set field; run;",
     "sow() %>%",
     "irrigate() %>%",
     "add(ladybugs) %>%",
     "plow() %>%",
     "add(biokill) %>%",
     "harvest()"
  ),
  pass_if(
    c(
    "field %>%",
    "plow() %>%",
    "sow() %>%",
    "irrigate() %>%",
    "add(ladybugs) %>%",
    "harvest()"
    ),
    message = "Well done, you master the Mandrake culture ! Enter code 777 in icaRius game to continue the adventure"
  ),
    pass_if(
    c(
    "field %>%",
    "plow() %>%",
    "sow() %>%",
    "add(ladybugs) %>%",
    "irrigate() %>%",
    "harvest()"
    ),
    message = "Well done, you master the Mandrake culture ! Enter code 777 in icaRius game to continue the adventure"
  ),
    pass_if(
    c(
    "field %>%",
    "plow() %>%",
    "add(ladybugs) %>%",
    "sow() %>%",
    "irrigate() %>%",
    "harvest()"
    ),
    message = "Well done, you master the Mandrake culture ! Enter code 777 in icaRius game to continue the adventure"
  ),
  fail_if(
    ~length(.) < 2,
    message = "Include at least two verbs"
  ),
  fail_if(
    ~{.[1] != "field %>%"},
    message = "Your solution should start with 'field %>%'"
  )
)

Have you found ? The above exercise gives you the answer code to use in icaRius game

version 0.9.1



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