Cette section présente une boîte de dialogue permettant de
saisir un nom de variable (sous forme de zone de liste),
une légende (sous forme de zone de texte) afin de faire un rapport sur
cette variable d'un dataframe.
Dans un premier temps, nous allons supposer que cette boîte de dialogue
s'applique uniquement au tableau de données
(nommé tab) défini ci-dessous :
# le dataframe (nommé tab) utilisé pour le rapport
sexe = c("homme","femme","femme","homme","homme")
math = c(10,12,5,9,13)
anglais = c(5,13,7,12,5)
tab = data.frame(math,anglais,sexe)
Le programme R ayant permis la réalisation du formulaire
a la forme suivante :
library(tcltk)
# Création de la boite de dialogue (nommée formu)
formu = tktoplevel()
tktitle(formu) = "Creation d'un rapport"
# fonctions associées aux boutons OK et Quitter
executer = function() {
# à compléter...
}
quitter = function() { tkdestroy(formu) }
# creation des composants : label_variable, zone_variable...
label_variable = tklabel(formu, text="variable : ")
zone_variable = tklistbox(formu, height=3, exportselection=0)
tkinsert(zone_variable,"end","math") # ajout de math
tkinsert(zone_variable,"end","anglais") # ajout d'anglais
tkinsert(zone_variable,"end","sexe") # ajout de sexe
label_legende = tklabel(formu, text="legende : ")
zone_legende = tkentry(formu)
bouton_ok = tkbutton(formu, text="OK", command=executer)
bouton_quitter = tkbutton(formu, text="Quitter", command=quitter)
# positionnement des composants sur 3 lignes
tkgrid(label_variable, zone_variable)
tkgrid(label_legende, zone_legende)
tkgrid(bouton_ok, bouton_quitter)
# affichage de la boite de dialogue
tkfocus(formu)
Cette boîte de dialogue comporte 6 composants :
deux labels (label_variable, label_legende), une zone de liste (zone_variable), une zone de texte (zone_legende)
et deux boutons de commandes (bouton_ok et bouton_quitter).
Ces composants sont affichés sur 3 lignes (car 3 appels à la fonction tkgrid).
Les boutons OK et Quitter sont associés aux fonctions executer et quitter.
La fonction quitter ferme la fenêtre.
La fonction executer, dont voici le code complet, fait un rapport sur la variable
sélectionnée dans la zone de liste (zone_variable) pour le tableau de données tab :
# fonction associée au bouton OK
executer = function() {
# recuperation des valeurs
variable = tclvalue( tkget(zone_variable,
tkcurselection(zone_variable)) )
legende = as.character( tkget(zone_legende) )
# affichage du resume
resume = summary(tab[[variable]])
print(resume)
# graphique : boite à moustaches ou camembert
if (is.numeric(tab[[variable]])) {
boxplot(tab[[variable]], main=legende)
} else {
pie(table(tab[[variable]]), main=legende)
}
}
Il ne faut pas confondre la zone de liste (zone_variable) avec sa valeur (variable)
calculée avec les fonctions tclvalue, tkget et tkcurselection.
Si vous souhaitez réutiliser souvent cette boîte de dialogue et l'appliquer
à n'importe quel tableau de données, il est conseillé de mettre
tout le code dans une fonction paramétrée par un tableau de données, d'enregistrer cette fonction dans
un fichier texte et de télécharger ce fichier texte en cas de besoin.
La technique de construction de la zone de liste doit être adaptée pour tenir compte
du tableau de données mis en paramètre :
# définition d'une fonction pour faciliter la réutilisation
zoneListe = function(tab) {
...
label_variable = tklabel(formu, text="variable : ")
zone_variable = tklistbox(formu, height=length(names(tab)),
exportselection=0)
for (element in names(tab)) {
tkinsert(zone_variable,"end",element)
}
...
}
Vous pouvez télécharger le fichier automatiser.R
qui contient la définition de cette fonction, le
sauvegarder sur votre disque dur, puis enfin exécuter son contenu
(commande sourcer du code R).
Ensuite, il ne vous reste plus qu'à appeler cette fonction :
# appel de la fonction avec le dataframe tab précédemment construit
zoneListe(tab)
# le dataframe peut ne pas s'appeler tab
sexe = c("homme","femme","femme","homme","homme")
taille = c(1.80,1.65,1.67,1.70,1.90)
nouveau = data.frame(sexe,taille)
zoneListe(tab=nouveau)