swirl
est un package qui permet de jouer des stionnaires dans R. Les question sont écrites dans un format yaml et on peut également préparer du code R.
swirlify
est un package pour faciliter la mise en place de questionnaire swirl.
On peut créer le cours Démarche statistique dans lequel on souhaite avoir deux leçons : la leçon Introduction à R et la leçon sur la régression simple.
library(swirlify)
::new_lesson("Introduction a R", "Demarche statistique")
swirlify::new_lesson("Modele de regression", "Demarche statistique") swirlify
Ces commandes créent la structure de répertoire nécessaire et les fichiers de base, notamment le fichier lesson.yaml dans le répertoire de chaque leçon.
On peut vouloir indiquer un ordre dans les leçons . Il faut alors sélectionner la leçon à ajouter dans le manifest puis l’ajouter.
::set_lesson('Demarche_statistique/Introduction_a_R/lesson.yaml')
swirlify::add_to_manifest()
swirlify::set_lesson('Demarche_statistique/Modele_de_regression/lesson.yaml')
swirlify::add_to_manifest() swirlify
head Demarche_statistique/MANIFEST
Pour travailler sur la leçon Introduction à R, il faut spécifier la leçon sur laquelle on travaille, par la commande suivante.
::set_lesson("Demarche_statistique/Introduction_a_R/lesson.yaml") swirlify
Cette commande ouvre le lesson.yaml correspondant dans lequel on peut commencer à mettre des questions.
Le fichier initLesson.R
contient les commandes à éxécuter avant de lancer la leçon. Il est utile de créer une fonction qui récupère le chemin du répertoire comprenant la leçon et charcger facilement un jeu de données.
' .get_course_path <- function(){
init_lesson_file <- tryCatch(swirl:::swirl_courses_dir(),
error = function(c) {file.path(find.package("swirl"),"Courses")}
)
}
dta <- read.table(file.path(.get_course_path(),
"Demarche_statistique", "Introduction_a_R", "usair.txt"), sep = ";", header = TRUE, skip = 8)'
writeLines(init_lesson_file, con = "Demarche_statistique/Introduction_a_R/initLesson.R")
Il faut mettre le fichier de données à l’endroit précisé
cp data/usair.txt Demarche_statistique/Introduction_a_R/.
Pour ajouter des nouvelles questions/interactions, on peut soit utiliser la commande swirlify()
pour entrer dans un mode interactif et poser des questions soit utiliser en ligne de commande les w + q + tab.
::wq_message(output = " Bienvenue sur le cours d'introdution à R") swirlify
::wq_multiple(
swirlifyoutput = "La table de données dta a été chargée. Parmi les variables suivantes, laquelle fait partie de ce jeu de données ?",
answer_choices = "manuf;Ville;temperature",
correct_answer = "manuf",
answer_tests = "omnitest(correctVal= 'manuf')",
hint = "La commande colnames permet d'afficher le nom des colonnes.")
On peut tout aussi bien éditer directement le fichier lesson.yaml pour obtenir le résultat suivant
- Class: meta
: Démarche statistique
Course: Introduction à R
Lesson: Marie-Pierre Etienne
Author: Standard
Type: Agrocampus Ouest
Organization: 2.4.5
Version
- Class: text
: "Bienvenue sur le cours d' introdution à R"
Output
- Class: mult_question
: La table de données dta a été chargée. Parmi les variables suivantes, laquelle fait partie de ce jeu de données ?
Output: manuf;Ville;temperature
AnswerChoices: manuf
CorrectAnswer: omnitest(correctVal= 'ANS')
AnswerTests: "La commande colnames permet d'afficher le nom des colonnes". Hint
On peut aussi ajouter des questions qui demandent un code en réponse avec wq_command
.
wq_command( output = "Donner la commande R permettant d'afficher le nom des colonnes de la table de données dta",
correct_answer = "colnames(dta)",
answer_tests = "omnitest(correctExpr = 'colnames(dta)')",
hint = "Explorer les commandes rownames et colnames.")
Les différents types de question possibles sont disponibles ici
Lorsque la suite de question est écrite on peut tester la leçon.
::demo_lesson() swirlify
Pour distribuer le cours il faut l’empaqueter.
::pack_course()
swirlify
::install_course(swc_path = "~/git/finistR2020/enseignement/Demarche_statistique.swc")
swirlswirl()
Des cours sont disponibles sur le Swirl Course Network dans différentes langues.