Soyez les bienvenus : vous voici dans l’environnement de développement RStudio. Prenez le temps de trouver vos marques. L’environnement a été préparé pour vous : à gauche le panneau source, à droite le viewer. Sentez-vous libre de manipuler les fenêtres comme bon vous semble.

Pour faciliter la mise en forme des mémoires d’Icarius au Royaume de Statis, nous allons utiliser le dièse pour faire en sorte que le texte apparaisse comme un titre dans le rapport des aventures. Voyez plutôt : en positionnant un dièse sur la ligne 6, on observe une mise en page sous forme de grand titre du rendu sur votre droite. Et en encadrant des mots avec des _ de part et d’autre, on constate leur mise en forme italique. Nous utiliserons ces balises tout au long du texte. Notez comment RStudio les colore en bleu pour nous assister.

Chapitre 1

Icarius se réveille, Statia lui murmure dans un demi-sommeil que son royaume est en danger : elle a besoin de lui. Sitôt levé, vous avez rencontré le mage Zilap, qui vous a invité à prendre possession du grimoire IgoR.

Pour quitter la maison d’Icarius, vous avez répondu à la question du mage RegoR :

Quel est l’âge d’Icarius ?

À cet effet, nous avons exécuté l’instruction suivante :

nb_coeur <- 3
max_nb_coeur <- 2*nb_coeur
(nb_coeur * pi^2) - max_nb_coeur
## [1] 23.60881

Une fois dehors, vous avez parcouru les plaines de Statis et rencontré Statia. Ou plutôt un spectre d’elle qui nous offre une épée.

Chapitre 2

Parfaitement équipé, nous nous sommes rendu au village Kokoro en hachant menu les buissons.
Au village, le mage Tourep nous confie la lourde responsabilité d’aider la fermière avec le registre des pontes.

En reconstituant le livre de comptes à partir des 4 fichiers aux formats différents quelle poule est la plus performante ?

library(rio)
## Warning: package 'rio' was built under R version 4.0.3
livre_compte_1 <- import("donnees/pontes_semaine1.sas7bdat")
livre_compte_2 <- import("donnees/pontes_semaine2.xls")
livre_compte_3 <- import("donnees/pontes_semaine3.ods")
livre_compte_4 <- import("donnees/pontes_semaine4.csv")

Dans le livre 1, la meilleure poule est :

livre_compte_1
##        Poule Oeufs
## 1   Gertrude    22
## 2 Madame Mim    20
## 3   Poupoule    18
## 4      Daisy    16
## 5      Kokot    26
## 6  Chickitta    12

Dans le livre 2, la meilleure poule est :

livre_compte_2
##        Poule Oeufs
## 1   Gertrude    20
## 2 Madame Mim    18
## 3   Poupoule    20
## 4      Daisy    14
## 5      Kokot    22
## 6  Chickitta    16

Dans le livre 3, la meilleure poule est :

livre_compte_3
##        Poule Oeufs
## 1   Gertrude    16
## 2 Madame Mim    24
## 3   Poupoule    18
## 4      Daisy    18
## 5      Kokot    26
## 6  Chickitta    20

Dans le livre 4, la meilleure poule est :

livre_compte_4
##        Poule Oeufs
## 1   Gertrude    20
## 2 Madame Mim    22
## 3   Poupoule    12
## 4      Daisy    14
## 5      Kokot    28
## 6  Chickitta    16

Le mage Tourep nous remercie d’un bouclier qui nous rend apte à traverser les dangers des plaines de Statis. Ainsi équipé, nous accédons à la première rune en abattant un monstrueux papillon.

Chapitre 3

Au delà des plaines de Statis, le mage Xeilhac qui siège dans le village GrissGrass nous bassine avec sa soupe et… la mandragore. Il nous charge de mener l’enquête.

Qui possède l’exploitation la plus productive ?

fichier_tellus <- import("donnees/recensement_agricole_statia_Tellus.ods")
fichier_galia <- import("donnees/recensement_agricole_statia_Galia.ods")

library(skimr)
skim(fichier_galia)
Data summary
Name fichier_galia
Number of rows 10
Number of columns 5
_______________________
Column type frequency:
character 1
numeric 4
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Exploitation 0 1 5 5 0 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
An 0 1 1015.5 3.03 1011 1013.25 1015.5 1017.75 1020 ▇▇▇▇▇
Plants 0 1 44.7 2.87 41 43.00 44.5 46.00 49 ▅▇▂▅▅
Feuilles 0 1 366.0 25.31 327 347.75 364.0 382.00 412 ▇▅▅▅▂
Litres 0 1 36.6 2.55 33 34.50 36.5 38.50 41 ▇▅▅▅▂
skim(fichier_tellus)
Data summary
Name fichier_tellus
Number of rows 10
Number of columns 5
_______________________
Column type frequency:
character 1
numeric 4
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Exploitation 0 1 6 6 0 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
An 0 1 1015.5 3.03 1011 1013.25 1015.5 1017.75 1020 ▇▇▇▇▇
Plants 0 1 50.9 9.17 38 42.50 52.0 58.75 62 ▇▁▅▅▇
Feuilles 0 1 496.9 85.27 380 418.75 507.0 571.00 610 ▇▁▇▂▇
Litres 0 1 33.9 8.63 22 25.75 36.0 40.75 44 ▇▁▂▇▇

Le modeste Galia est bien le meilleur producteur de Mandragore - tant pis pour ce prétentieux Tellus !

Chapitre 4

Mais ce n’est pas suffisant, le mage Xeilhac vous pose une autre colle :

quel est donc le secret d’une telle performance ?

La productivité de la meilleure exploitation est explicable par l’efficacité à conjuguer et chaîner les opérations sur la culture avec l’opérateur %>%. L’itinéraire technique optimal de la culture de la Mandragore est la suivante :

champ %>% 
  labourer() %>% 
  ajouter(coccinelles) %>%
  semer() %>% 
  arroser() %>% 
  recolter()

En récompense à vos nouvelles compétences en vocabulaire, le fermier Galia et le chef du village de Griss Grass vous offrent un filtre de mandragore : vos pouvoirs sont augmentés.

En allant au-delà du cimetière de GrissGrass, nous voilà face au monstrueux et souterrain Tartaros qui emprisonne les esprits égoïstes qui ne partagent pas leur code.

Gonflé au philtre de Mandragore, Icarius n’en fait qu’une bouchée et prend du galon : il acquiert sa seconde rune.

Chapitre 5

Arrivé au château de Statis la situation est dramatique : des forces occultes sont à l’oeuvre. Le ministre des armées Parlyus occupe le château avec des soldats.
Il réclame la guerre ! Quelle drôle d’idée ! Pour obtenir la clé de la cachette d’Essespéus et se faire aider, il faut gagner la confiance de Batreb qui noie son chagrin dans l’ambroisi… Pour cela, vous devez résoudre l’énigme proposée en traçant le graphique qui permet de répondre à la question suivante :

A partir de quelle puissance d’ambroisie Batreb franchit le seuil des 100 hoquets par heure ?

livre_ambroisie %>% 
  gf_line(ivresse ~ puissance, title = "Attention à l'abus d'ambroisie...")

Vous obtenez la clé qui permet de libérer Essespéus de la cave (ou ce qu’il en reste, hips !).

Chapitre 6

Une fois libéré de son cachot, Essespéus vous propose de tromper Parlyus en lui communiquant une fake news. Il s’agit de le tromper et de diriger les forces obscures le plus loin possible auprès du peuple le plus armé. Le temps presse, car il s’agit de vaincre Sassos avant que le chef des armées ne rejoigne ce territoire. Statis est un royaume pacifique et vous devez veiller à ce qu’il le reste.

Quel royaume est le plus éloigné, tout en comptant le plus de guerriers et le plus grand nombre de jours de canicule ?

library(ggformula)

donnees_secretes %>% 
  gf_point(nb_canicule ~ dist_royaume,
           size = ~ nb_guerriers,
           shape = 5) %>% 
  gf_text(label = ~ royaume,
          size = 2.5,
          check_overlap = TRUE) %>%
  gf_refine(scale_x_continuous(limits = c(0, 50)))

C’est le territoire des Hauts qu’il faut attaquer !

Et c’est là la rencontre avec Sassos ! Ou plutôt un ectoplasme de lui. Il n’empêche que sa terrible PROC FIREBALL vous a salement amoché et il a disparu d’un coup de PROC EXPAND ! Heureusement, vous avez pu vous défendre en réfléchissant ses tirs grâce à l’épée.

Chapitre 7

Le mage Delagarde à l’entrée du labyrinthe vous propose de manipuler quelques vecteurs pour vous guider dans le dédale. Bien que…il est possible de s’en sortir sans aide à dire vrai.

Qu’à cela ne tienne ! Il énonce une étrange vérité :

quelle que soit la direction que tu regardes, la sortie se trouve au delà de Pi.

# Chercher les éléments de  vecteur_seuil dont la valeur est supérieure à pi
# et sauvegarder cet ensemble de position dans un vecteur appelé vecteur_position
vecteur_position <- which(vecteur_seuil>pi)
# Extraire de vecteur_choix les éléments qui sont dans les emplacements 
# de vecteur_position et afficher cet ensemble de directions
vecteur_choix[vecteur_position]
## [1] "Gauche" "Droite" "Gauche" "Gauche"

Chapitre 8

Une fois extrait du labyrinthe, vous retrouvez le mage Zilap dans le désert. Ce vieux ronchon doit bien reconnaître que vous avez progressé dans le maniement du langage des Runes ! Il vous explique comment ajouter des pages au grimoire, chaque package étant un nouveau chapitre.

# J'installe les packages du tidyverse en une ligne
install.packages("tidyverse")
# Je charge les packages en une ligne
library(tidyverse)

Vous voilà plus léger, ou plutôt les objets qui vous entourent le sont. Et vous rejoignez le village de Sandia.

Chapitre 9

Le temps presse, vous débarquez dans le village de Sandia. Mam’Grouxi radote et vous conte les innombrables naissances qu’elle a vu au fil des ans (des siècles?). Elle vous demande d’identifier, dans le registre des naissances, le nom d’une jeune fille dont le Mana (la force vitale et magique) est le plus élevé.

naissances %>% 
  filter(Genre == "F") %>%
  mutate(Mana = Force + Spirit) %>%
  arrange(desc(Mana))

C’est Statia ! et elle est née dans le village d’Hylia. Mam’Grouxi vous fait cadeau des bombes qui permettent de percer la montagne et entrer dans le temple de la Roche. Et c’est au coeur des souterrains, en déjouant monstres et boules de feu que le pouvoir de l’épée se trouve renforcé. Et heureusement, car c’est Monolith qu’il faut affronter en déjouant ces satanées boules de feu.

Vous voilà en possession de la quatrième rune.

En quittant le temple de la roche, l’éboulement condamne tout retour en arrière : l’affrontement final de SassoS est inélectuable.

Chapitre 10

En poursuivant vos pérégrinations et après avoir abattu quelques drôles de sphinx, icaRius se trouve pris au piège dans la salle de l’impossible. Quelle que soit la direction prise, Icarius atterrit toujours au même endroit. Il doit apprendre à garder les choses en mémoire et les sauvegarder.

save(naissances_1213,naissances_mana,file="../sauvegarde/tables_chapitre9.RData")
sink()
ggsave()
export()

En retenant la suite d’instructions directionnelles qui s’avère être la célèbre suite de Konami, Icarius prend possession du bouclier éponyme.

Chapitre 11

Au sortir de la salle de l’impossible, Icarius ne peut poursuivre son chemin face aux tourbillons de l’éternel recommencement : il se retrouve systématiquement éjecté. C’est le robot TeoC, envoyé par le mage Essespéus, qui nous vient en aide en vous intronisant aux voies du reproductible. Ses manières ne sont pas des plus délicates : il catapulte Icarius au tout début de l’histoire !

Vous voilà à écrire votre première fonction, celle qui calcule l’âge d’Icarius.

calcul_age_arrondi <- function(nb_coeur) { 
  round(nb_coeur * pi^2 - 2 * nb_coeur)
}

C’est ainsi vous obtenez le boomerang magique qui permet de désamorcer les tourbillons de l’éternel recommencement : Icarius peut ainsi pénétrer dans le temple de l’ombre.

Muni de la petite clef et de la carte du donjon, les longues errances dans le labyrinthe de l’ombre conduisent à Zigûr, l’infâme oeil de Sassos. Grâce au boomerang pour agir à distance car le sol est pavé de trous béants et à votre épée, vous prenez possession de la cinquième rune.

Chapitre 12

Sorti enfin à l’air libre, vous longez le datalake jusqu’à rencontrer le drôle d’oiseau Febeler. S’il veut bien vous donnez les moyens de traverser à la nage le lac avec le sortilège palmes(), il vous faut toutefois documenter son fonctionnement et donc en lire la documentation car pour le paraphraser :

Sans sortilège, point de magie ! Et sans documentation, point de sortilège !

Vous voilà donc à soigneusement documenter votre précieuse fonction calcul_age_arrondi() grâce aux balises roxygen2 et c’est là la réponse à l’énigme posée par l’oiseau.

#' @title calcul_age_arrondi
#' @description calculer l'âge arrondi d'un statisien selon son nombre de coeurs
#' @param nb_coeur Un nombre
#' @import tidyverse
#' @examples
#' calcul_age_arrondi(3)
#' calcul_age_arrondi(4)
calcul_age_arrondi <- function(nb_coeur){
  calcul_age(nb_coeur)%>%
    round()}

Febeler s’acquitte de sa promesse et vous fournit les palmes nécessaires à une traversée qui n’est pas sans encombres.

Arrivé au temple de la glace, les longs couloirs parsemés d’objets qui vous rapprochent de votre quête sont légion : une carte, une boussole, une petite clé, la clé du boss… La fin de ce chapitre approche ! Vous rencontrez Confusius, maître en ces lieux. Et remportez la sixième rune ! Une fois dehors, vous ne pouvez plus faire marche arrière. Qu’à cela ne tienne, la quête reprend.

Febeler, lui encore, vous aiguille vers l’Est dans une forêt brumeuse peuplée de squelettes. La progression à travers les grumes creuses est difficile…

Dernier chapitre

Vous rencontrez enfin Asa la gueRnouille qui vous propose d’écrire votre destin et vos mémoires, simultanément.

Votre quête de la maîtrise du langage des runes s’achève ici. Prenez quelques instants pour observer le chemin accompli : vous avez importé des fichiers, manipulé des données, synthétisé leur contenu en des tableaux résumés, exporté ces mêmes données pour les sauvegarder, créé et documenté des fonctions pour les réutiliser et les transmettre. Toutes les traces de votre connaissance (et bravoure !) sont présentées dans le présent (et précieux) document.

Vous pouvez, si vous le souhaitez, en guise d’aide-mémoire pour vos prochaines aventures avec R, enregistrer le fichier html qui résulte de ce RMarkdown en vous rendant dans l’onglet Files, qui se trouve sur votre droite, dans un cadran de la partie inférieure de l’écran.

Cliquez sur la case qui jouxte le nom de fichier et l’engrenage dans le menu de l’onglet vous laissera l’opportunité d’exporter votre prose.

Toujours dans cet onglet Files, vous trouverez juste à côté de votre RMarkdown (.Rmd) et html (fichier lisible dans un navigateur web) un fichier intitulé pour_asa.txt : il contient la réponse à fournir à Asa pour finaliser votre aventure au royaume de Statis. Pour ouvrir ce fichier pour_asa.txt, il vous suffira de cliquer dessus…

Une fois bien noté ce code magique, vous pouvez reprendre le jeu vidéo icaRius et donner la réponse à Asa la gueRnouille.

(Fin de cette épreuve. Version 0.9.4)