Valid XHTML     Valid CSS2    

Listing du fichier progie2.php

 

00001     <?php
00002     
# # (gH) -_- progie2.php ; TimeStamp (unix) : 16 F&eacute;vrier 2015 vers 21:19
00003     
00004     
error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00005     
00006     include_once(
"std7.php") ;
00007     include_once(
"progi.php") ;
00008     include_once(
"statuno7.php") ;
00009     
00010     
$R
= s_span("R","gbleuf") ;
00011     
$numSerie
= 2 ;
00012     
debutPageExercices
($numSerie) ;
00013     
00014     
## -------------------------------------------------------------------------------------------
00015     
00016     
p
("texte") ;
00017     echo
"" ;
00018     
finp() ;
00019     
debutSection() ;
00020     
00021     
$tableauDesRubriques = array() ;
00022     
$idr
= 0 ;
00023     
00024     
$idr
++; $tableauDesRubriques[$idr] = "Permutation (simple) de variables" ;
00025     
$idr
++; $tableauDesRubriques[$idr] = "&laquo;R&egrave;gles&raquo; d'&eacute;criture des noms de variables" ;
00026     
$idr
++; $tableauDesRubriques[$idr] = "Calculs et affichages avec le symbole deux-points" ;
00027     
$idr
++; $tableauDesRubriques[$idr] = "Pourcentages et normalisation" ;
00028     
$idr
++; $tableauDesRubriques[$idr] = "Valeurs sp&eacute;ciales en $R" ;
00029     
$idr
++; $tableauDesRubriques[$idr] = "La fonction rep" ;
00030     
$idr
++; $tableauDesRubriques[$idr] = "Souligner une phrase" ;
00031     
$idr
++; $tableauDesRubriques[$idr] = "Les subtilit&eacute;s de la fonction ".b("cat()") ;
00032     
$idr
++; $tableauDesRubriques[$idr] = "Calcul du &chi;".sup(2)." d'ad&eacute;quation avec contributions" ;
00033     
$idr
++; $tableauDesRubriques[$idr] = "Arbre syntaxique abstrait d'une expression" ;
00034     
00035     
$tdmCRLM
= new tdm($tableauDesRubriques) ;
00036     
$tdmCRLM
->titre() ;
00037     
$tdmCRLM
->menu("oui","oui","nou") ;
00038     
00039     
afficherSolutions
($numSerie) ;
00040     
00041     
finSection() ;
00042     
00043     
debutSection() ;
00044     
$numExo
= 0 ;
00045     
00046     
## -------------------------------------------------------------------------------------------
00047     
00048     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Permutation (simple) de variables
00049     
00050     ## -------------------------------------------------------------------------------------------
00051     
00052     # en 4 instructions, perm. circulaire
00053     
00054     
blockquote() ;
00055     
00056     
blockquote() ;
00057     
00058     
p
("texte") ;
00059     echo
"On dispose de deux valeurs " ;
00060     echo
b
("a") ;
00061     echo
" et " ;
00062     echo
b
("b") ;
00063     echo
" dont le contenu peut &ecirc;tre num&eacute;rique, texte ou autre (ce sont peut-&ecirc;tre des listes)." ;
00064     echo
" Trouver une fa&ccedil;on simple de sauvegarder le contenu de chaque variable avant de les permuter, sans doute " ;
00065     echo
" en quatre instructions (commentaires non compris)." ;
00066     
finp() ;
00067     
00068     
p
("texte") ;
00069     echo
"Quelle est la solution classique en trois instructions, nomm&eacute;e \"permutation circulaire\"&nbsp;?" ;
00070     
finp() ;
00071     
00072     
finblockquote() ;
00073     
00074     
solution
($numExo,$numSerie) ;
00075     
00076     
p
("texte") ;
00077     echo
"Voici la solution \"tranquille\" o&ugrave; on sauvegarde chaque variable dans une autre variable" ;
00078     
finp() ;
00079     
00080     
pre_fichier
("permute1.txt","cadre") ;
00081     
00082     
p
("texte") ;
00083     echo
"Puis la \"fameuse\" solution classique en trois instructions" ;
00084     
finp() ;
00085     
00086     
pre_fichier
("permute2.txt","cadre") ;
00087     
00088     
finsolution() ;
00089     
00090     
finblockquote() ;
00091     
00092     
## -------------------------------------------------------------------------------------------
00093     
00094     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # «R&egrave;gles» d'&eacute;criture des noms de variables
00095     
00096     ## -------------------------------------------------------------------------------------------
00097     
00098     # camel snake
00099     
00100     
blockquote() ;
00101     
00102     
blockquote() ;
00103     
00104     
p
("texte") ;
00105     echo
"Il est d'usage d'utiliser au moins trois ou quatre lettres pour les identifiants de variables, " ;
00106     echo
" comme "
.b("nbl")." ou ".b("nblignes")." pour indiquer le nombre de lignes, au lieu d'un simple ".b("n").". " ;
00107     echo
" Quelles sont les conventions d'&eacute;criture&nbsp;? Laquelle fournit les identificateurs les plus lisibles&nbsp;?" ;
00108     
finp() ;
00109     
00110     
finblockquote() ;
00111     
00112     
solution
($numExo,$numSerie) ;
00113     
00114     
p
("texte") ;
00115     echo
"La convention " ;
00116     echo
href
("http://fr.wikipedia.org/wiki/CamelCase","camelCase")." et ses variantes " ;
00117     echo
" &eacute;crit les mots coll&eacute;s avec initiale majuscule l&agrave; o&ugrave; la convention " ;
00118     echo
href
("http://en.wikipedia.org/wiki/Snake_case","snake_case")." les s&eacute;pare avec un tiret soulign&eacute;. " ;
00119     echo
" D'autres notations sont possibles avec des points.
$R autorise m&ecirc;me les noms de variables avec des espaces, " ;
00120     echo
" ce qui n'est absolument pas pratique. " ;
00121     
finp() ;
00122     
00123     
p
("texte") ;
00124     echo
"Utiliser des "
.href("http://fr.wikipedia.org/wiki/Convention_de_nommage","conventions de nommage") ;
00125     echo
" pr&eacute;sente de nombreux avantages (voir aussi " ;
00126     echo
href
("http://en.wikipedia.org/wiki/Naming_convention_%28programming%29","naming conventions")."). " ;
00127     echo
" Une pratique classique consiste &agrave; utiliser juste ou trois 4 lettres, comme un sigle, avec une " ;
00128     echo
b
("tdc")." (table de correspondance) en d&eacute;but d'algorithme." ;
00129     
finp() ;
00130     
00131     
pre_fichier
("nommage.txt","cadre") ;
00132     
00133     
p
("texte") ;
00134     echo
"Il nous semble que la lisibilit&eacute; est une notion subjective et qu'il est donc difficile " ;
00135     echo
" de pr&eacute;tendre qu'une convention de nommage est vraiment meilleure qu'une autre. Dans les faits, " ;
00136     echo
" certains langages imposent plus ou moins des conventions mais &laquo;" ;
00137     echo
em
("chacun fait ce qui lui plait")."&raquo; au final." ;
00138     
finp() ;
00139     
00140     
finsolution() ;
00141     
00142     
finblockquote() ;
00143     
00144     
## -------------------------------------------------------------------------------------------
00145     
00146     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Calculs et affichages avec le symbole deux-points
00147     
00148     ## -------------------------------------------------------------------------------------------
00149     
00150     
blockquote() ;
00151     
00152     
blockquote() ;
00153     
00154     
p
("texte") ;
00155     echo
"On suppose que "
.("n")." contient 10. Trouver comment g&eacute;n&eacute;rer&nbsp;:" ;
00156     
finp() ;
00157     
00158     
ul() ;
00159     
00160     
debutli
() ; p() ;
00161      echo
"tous les nombres de 1 &agrave; n"
.sup(2) ;
00162     
finp
() ; finli() ;
00163     
00164     
debutli
() ; p() ;
00165      echo
"le carr&eacute; des nombres de 1 &agrave; n" ;
00166     
finp
() ; finli() ;
00167     
00168     
debutli
() ; p() ;
00169      echo
"les n premiers nombres pairs, impairs" ;
00170     
finp
() ; finli() ;
00171     
00172     
debutli
() ; p() ;
00173      echo
"les n premi&egrave;res puissances de 10" ;
00174     
finp
() ; finli() ;
00175     
00176     
debutli
() ; p() ;
00177      echo
"les n premi&egrave;res lettres de l'alphabet" ;
00178     
finp
() ; finli() ;
00179     
00180     
finul() ;
00181     
00182     
finblockquote() ;
00183     
00184     
solution
($numExo,$numSerie) ;
00185     
00186     
p
("texte") ;
00187     echo
"Voici les r&eacute;ponses, sans plus d'explications&nbsp;" ;
00188     
finp() ;
00189     
00190     
pre_fichier
("avecn.txt","cadre") ;
00191     
00192     
finsolution() ;
00193     
00194     
finblockquote() ;
00195     
00196     
## -------------------------------------------------------------------------------------------
00197     
00198     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Pourcentages et normalisation
00199     
00200     ## -------------------------------------------------------------------------------------------
00201     
00202     
blockquote() ;
00203     
00204     
blockquote() ;
00205     
00206     
p
("texte") ;
00207     echo
"On suppose que le vecteur "
.("v")." contient des valeurs num&eacute;riques. " ;
00208     echo
" Trouver les instructions qui permettent d'afficher&nbsp;" ;
00209     
finp() ;
00210     
00211     
ul() ;
00212     
00213     
debutli
() ; p() ;
00214      echo
"le vecteur normalis&eacute; issu de v (on divise par le max, la plus grande valeur est 1)" ;
00215     
finp
() ; finli() ;
00216     
00217     
debutli
() ; p() ;
00218      echo
"le vecteur centr&eacute; issu de v (on soustrait la moyenne, la moyenne devient 0)" ;
00219     
finp
() ; finli() ;
00220     
00221     
debutli
() ; p() ;
00222      echo
"les pourcentages associ&eacute;s aux valeurs de v avec 2 d&eacute;cimales" ;
00223     
finp
() ; finli() ;
00224     
00225     
finul() ;
00226     
00227     
00228     
p
("texte") ;
00229     echo
"Voici, si v contient les nombres 5&nbsp;12&nbsp;8, ce qu'on veut obtenir&nbsp;:" ;
00230     
finp() ;
00231     
00232     
pre_fichier
("pctnorm.txt","cadre") ;
00233     
00234     
finblockquote() ;
00235     
00236     
solution
($numExo,$numSerie) ;
00237     
00238     
p
("texte") ;
00239     echo
"Ces calculs ne requi&egrave;rent que des affectations, bien s&ucirc;r, et des appels de fonctions de
$R&nbsp;:" ;
00240     
finp() ;
00241     
00242     
pre_fichier
("pctnorm.r","cadre") ;
00243     
00244     
finsolution() ;
00245     
00246     
finblockquote() ;
00247     
00248     
## -------------------------------------------------------------------------------------------
00249     
00250     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Valeurs sp&eacute;ciales en R
00251     
00252     ## -------------------------------------------------------------------------------------------
00253     
00254     
blockquote() ;
00255     
00256     
blockquote() ;
00257     
00258     
p
("texte") ;
00259     echo
"On veut cr&eacute;er le vecteur "
.b("resultats").". Sa premi&egrave;re valeur est 5, sa troisi&egrave;me valeur est 8 " ;
00260     echo
" mais pour l'instant on ne connait pas la valeur num&eacute;ro deux. Comment faire&nbsp;?" ;
00261     
finp() ;
00262     
00263     
p
("texte") ;
00264     echo
"Dans "
.href("progic2.php","le cours de la s&eacute;ance 2").", comme dans les autres cours, il y a de nombreux liens sur l'aide en ligne des fonctions en $R " ;
00265     echo
" sous les mots en vert. Apr&egrave;s avoir relu celle sur NULL, NaN, Inf, essayer de construire des expressions qui " ;
00266     echo
" renvoient ces valeurs. Quelle est leur \"classe\"&nbsp;?" ;
00267     echo
" Peut-on leur ajouter 1, les utiliser dans des comparaisons&nbsp;?" ;
00268     echo
" Compl&eacute;ter avec les valeurs "
.b("TRUE")." et ".b("FALSE").". " ;
00269     
finp() ;
00270     
00271     
finblockquote() ;
00272     
00273     
solution
($numExo,$numSerie) ;
00274     
00275     
p
("texte") ;
00276     echo
"Une valeur inconnue se note "
.b("NA").". De fa&ccedil;on un peu surprenante, la classe de NA est ".b("logical")." comme " ;
00277     echo
" pour "
.b("TRUE")." (vrai) et ".b("FALSE")." (faux). Ajouter 1 &agrave; NA renvoie NA, faire une comparaison avec NA aussi. " ;
00278     
finp() ;
00279     
00280     
p
("texte") ;
00281     echo
"NULL est identique au vecteur vide "
.b("c()")." qu'il ne faut pas confondre avec la liste vide ".b("list()").". " ;
00282     echo
" La classe de NA est "
.b("NULL").". " ;
00283     echo
" Ajouter 1 &agrave; NULL renvoie un peu myst&eacute;rieusement "
.b("numeric(0)").". " ;
00284     echo
" Faire une comparaison avec NULL renvoie "
.b("logical(0)").". " ;
00285     
finp() ;
00286     
00287     
p
("texte") ;
00288     echo
" Une fa&ccedil;on simple d'atteindre l'infini (!) est de chercher &agrave; calculer 1/0. " ;
00289     echo
" La classe de Inf est "
.b("numeric").". " ;
00290     echo
" Ajouter 1 &agrave; Inf renvoie "
.b("Inf").". " ;
00291     echo
" Il n'y a que deux infinis pour
$R&nbsp;: Inf et -Inf. " ;
00292     
finp() ;
00293     
00294     
p
("texte") ;
00295     echo
" Pour produire NaN, on peut chercher &agrave; calculer 0/0. " ;
00296     echo
" La classe de NaN est "
.b("numeric").". " ;
00297     echo
" Ajouter 1 &agrave; NaN renvoie "
.b("NaN").". " ;
00298     echo
" Comparer 1 &agrave; NaN renvoie "
.b("NA")." (encore fallait-il y penser&nbsp;!). " ;
00299     
finp() ;
00300     
00301     
pre_fichier
("naetc.txt","cadre") ;
00302     
00303     
00304     
p
("texte") ;
00305     echo
"Je vous laisse imaginer ce que peut donner "
.b("Inf+NaN")." et ".b("Inf+NULL") ;
00306     echo
" -- &agrave; savoir "
.b("NaN")." et ".b("numeric(0)")." -- " ;
00307     echo
" sachant qu'on ne fait pas en g&eacute;n&eacute;ral ces calculs expr&egrave;s, mais qu'on les obtient " ;
00308     echo
" si des variables sont mal d&eacute;finies, si une lecture de fichier a &eacute;chou&eacute; etc. " ;
00309     
finp() ;
00310     
00311     
finsolution() ;
00312     
00313     
finblockquote() ;
00314     
00315     
## -------------------------------------------------------------------------------------------
00316     
00317     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # La fonction rep
00318     
00319     ## -------------------------------------------------------------------------------------------
00320     
00321     
blockquote() ;
00322     
00323     
blockquote() ;
00324     
00325     
p
("texte") ;
00326     echo
"Apr&egrave;s avoir lu l'aide sur " ;
00327     echo
lafonction
("rep") ;
00328     echo
" et " ;
00329     echo
lafonction
("vector") ;
00330     echo
" essayer de produire un vecteur qui contient 10 fois la valeur 0 " ;
00331     echo
" puis un autre vecteur qui contient 20 valeurs &agrave; savoir des 0 et des 1 en alternance " ;
00332     echo
" puis 11 fois 0 suivis de 10 fois 1. " ;
00333     echo
" Enfin, essayer de produire le vecteur 1&nbsp;-2&nbsp;3&nbsp;-4..." ;
00334     
finp() ;
00335     
00336     
p
("texte") ;
00337     echo
"Au passage, comment afficher un vecteur en colonne, avec le num&eacute;ro de l'&eacute;l&eacute;ment devant sa valeur comme ci-dessous&nbsp;?" ;
00338     
finp() ;
00339     
00340     
pre_fichier
("cbind1.txt","cadre") ;
00341     
00342     
p
("texte") ;
00343      echo
"Que contient la variable "
.b("x")." si on la d&eacute;finit par ".b("x&nbsp;&lt;-&nbsp;vector(length=8)")."&nbsp;?" ;
00344     
finp() ;
00345     
00346     
finblockquote() ;
00347     
00348     
solution
($numExo,$numSerie) ;
00349     
00350     
p
("texte") ;
00351     echo
"Voici les expressions demand&eacute;es baties sur "
.b("rep")."&nbsp;:" ;
00352     
finp() ;
00353     
00354     
pre_fichier
("rep.txt","cadre") ;
00355     
00356     
p
("texte") ;
00357     echo
"D&eacute;finir un vecteur en utilisant explicitement " ;
00358     echo
lafonction
("vector")." n'est sans doute pas une bonne id&eacute;e puisque la valeur par d&eacute;faut est ".b("FALSE").". " ;
00359     echo
" De m&ecirc;me &eacute;crire "
.b('vector(mode="numeric",length=8)')." pour g&eacute;n&eacute;rer 8 fois 0 n'est sans doute pas tr&egrave;s explicite par rapport &agrave; " ;
00360     echo
b
("rep(0,times=8)").". " ;
00361     
finp() ;
00362     
00363     
p
("texte") ;
00364     echo
"Pour forcer un affichage en colonne, on peut utiliser " ;
00365     echo
lafonction
("cbind")."&nbsp;:" ;
00366     
finp() ;
00367     
00368     
pre_fichier
("cbind2.txt","cadre") ;
00369     
00370     
p
("texte") ;
00371     echo
"La fonction " ;
00372     echo
hrrr
("cbind")." est surtout pratique pour afficher la correspondance entre num&eacute;ro de colonne et nom de colonne&nbsp;:" ;
00373     
finp() ;
00374     
00375     
pre_fichier
("cbind3.txt","cadre") ;
00376     
00377     
finsolution() ;
00378     
00379     
finblockquote() ;
00380     
00381     
## -------------------------------------------------------------------------------------------
00382     
00383     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Souligner une phrase
00384     
00385     ## -------------------------------------------------------------------------------------------
00386     
00387     
blockquote() ;
00388     
00389     
blockquote() ;
00390     
00391     
p
("texte") ;
00392     echo
"On voudrait souligner avec le caract&egrave;re \"&eacute;gal\" un titre ou une phrase, comme dans l'exemple suivant o&ugrave; " ;
00393     echo
" on a soulign&eacute; le texte \"un exemple de soulignement\"." ;
00394     echo
" Comment r&eacute;aliser cela avec un seul appel de la fonction "
.hrrr("cat")."&nbsp;?" ;
00395     echo
" On utilisera, &laquo;bien s&ucirc;r&raquo;, les fonctions " ;
00396     echo
hrrr
("nchar").", " ;
00397     echo
hrrr
("rep")." et " ;
00398     echo
hrrr
("paste").". " ;
00399     
finp() ;
00400     
00401     
pre_fichier
("souligner00.txt","cadre") ;
00402     
00403     
finblockquote() ;
00404     
00405     
solution
($numExo,$numSerie) ;
00406     
00407     
p
("texte") ;
00408     echo
"Il faut produire autant de caract&egrave;res \"&eacute;gal\" qu'il y a de caract&egrave;res dans la phrase indiqu&eacute;e. C'est justement " ;
00409     echo
" le role de la fonction "
.hrrr("nchar")." que de donner le nombre de caract&egrave;res d'une chaine. La premi&egrave;re tentative " ;
00410     echo
" avec " ;
00411     echo
hrrr
("nchar")." et " ;
00412     echo
hrrr
("rep")." est presque la bonne&nbsp;:" ;
00413     
finp() ;
00414     
00415     
pre_fichier
("souligner01.txt","cadre") ;
00416     
00417     
p
("texte") ;
00418     echo
"Comme " ;
00419     echo
hrrr
("rep")." renvoie un vecteur de caract&egrave;res \"&eacute;gal\", on utilise " ;
00420     echo
hrrr
("paste")." avec le param&egrave;tre ".b("collapse")." pour n'avoir qu'une seule chaine de caract&egrave;res&nbsp;:";
00421     
finp() ;
00422     
00423     
pre_fichier
("souligner02.txt","cadre") ;
00424     
00425     
finsolution() ;
00426     
00427     
finblockquote() ;
00428     
00429     
## -------------------------------------------------------------------------------------------
00430     
00431     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Les subtilit&eacute;s de cat()
00432     
00433     ## -------------------------------------------------------------------------------------------
00434     
00435     
blockquote() ;
00436     
00437     
blockquote() ;
00438     
00439     
p
("texte") ;
00440     echo
"Est-ce que l'instruction "
.b("cat(x,y)")." est &eacute;quivalente aux deux instructions " ;
00441     echo
b
("cat(x)&nbsp;;&nbsp;cat(y)")."&nbsp;?" ;
00442     
finp() ;
00443     
00444     
p
("texte") ;
00445     echo
" Comment doit-on afficher des informations sur deux lignes diff&eacute;rentes, comme par exemple " ;
00446     echo
b
("Bonjour")." et ".b("Bonsoir")."&nbsp;?" ;
00447     
finp() ;
00448     
00449     
p
("texte") ;
00450     echo
"Quels sont les autres param&egrave;tres de la fonction " ;
00451     echo
hrrr
("cat")."&nbsp;?" ;
00452     
finp() ;
00453     
00454     
finblockquote() ;
00455     
00456     
solution
($numExo,$numSerie) ;
00457     
00458     
p
("texte") ;
00459     echo
b
("cat(x)&nbsp;;&nbsp;cat(y)")." n'est pas &eacute;quivalent &agrave; " ;
00460     echo
b
("cat(x,y)")." parce que le s&eacute;parateur par d&eacute;faut de " ;
00461     echo
hrrr
("cat")." est un espace. Donc " ;
00462     echo
b
('cat("Bonjour\n","Bonsoir\n")') ;
00463     echo
" produit un espace de plus devant "
.b("Bonsoir")." que les deux instructions " ;
00464     echo
b
('cat("Bonjour\n")')." et " ;
00465     echo
b
('cat("Bonsoir\n")').". " ;
00466     echo
" Il est donc prudent d'&eacute;crire une ligne &agrave; la fois et de mettre "
.b('\\n')." comme dernier param&egrave;tre&nbsp;:" ;
00467     
finp() ;
00468     
00469     
pre_fichier
("cat01.txt","cadre") ;
00470     
00471     
p
("texte") ;
00472     echo
"Les autres param&egrave;tres principaux de " ;
00473     echo
hrrr
("cat")." sont " ;
00474     echo
b
("sep")." pour changer de s&eacute;parateur " ;
00475     echo
b
("file")." pour &eacute;crire dans un fichier au lieu de l'&eacute;cran, m&ecirc;me si utiliser " ;
00476     echo
hrrr
("sink")." avec le param&egrave;tre ".b("split")." mis &agrave; TRUE est plus \"".em("intelligent")."\". Voir " ;
00477     echo
"l'exercice 2 de la "
.href("progie5.php","s&eacute;ance 5")." pour plus de d&eacute;tails &agrave; ce sujet." ;
00478     
finp() ;
00479     
00480     
# pre_fichier("cat02.txt","cadre") ;
00481     
00482     
finsolution() ;
00483     
00484     
finblockquote() ;
00485     
00486     
## -------------------------------------------------------------------------------------------
00487     
00488     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Calcul du $\chi^2$ d'ad\'{e}quation avec contributions
00489     
00490     ## -------------------------------------------------------------------------------------------
00491     
00492     
blockquote() ;
00493     
00494     
blockquote() ;
00495     
00496     
p
("texte") ;
00497     echo
"On dispose d'un vecteur "
.noir("Vobs")." d'effectifs observ&eacute;s et d'un vecteur \n" ;
00498     echo
""
.noir("Vthe")." d'effectifs th&eacute;oriques. Comment effectuer le calcul et le cumul des carr&eacute;s pond&eacute;r&eacute;s des diff&eacute;rences \n" ;
00499     echo
"relatives entre valeurs observ&eacute;es et valeurs th&eacute;oriques (ou \"contributions\") que l'on triera par ordre croissant de pourcentage par \n" ;
00500     echo
"rapport au total des contributions en n'utilisant que des affectations&nbsp;? \n" ;
00501     
finp() ;
00502     
00503     
p
("texte") ;
00504     echo
"Avec quelle fonction de
$R peut-on v&eacute;rifier que le r&eacute;sultat de ces calculs \n" ;
00505     echo
"est correct ? \n" ;
00506     
finp() ;
00507     
00508     
p
("texte") ;
00509     echo
"On pourra, pour les vecteurs num&eacute;riques d&eacute;finis par \n" ;
00510     echo
""
.noir("Vobs &lt;- c(18,55,21,12,4)")." \n" ;
00511     echo
"et "
.noir("Vthe &lt;- c(6.875,27.5,41.25,27.5,6.875)").", \n" ;
00512     echo
"s'inspirer de la pr&eacute;sentation suivante pour afficher les r&eacute;sultats&nbsp;:\n" ;
00513     
finp() ;
00514     
00515     
pre_fichier
("chideux.txt","cadre") ;
00516     
00517     
finblockquote() ;
00518     
00519     
solution
($numExo,$numSerie) ;
00520     
00521     
p
("texte") ;
00522     echo
"Puisque
$R est ".b("vectoriel").", chaque colonne doit se calculer avec une seule instruction. \n" ;
00523     echo
"Afin d'obtenir un bel affichage, on regroupe les variables cr&eacute;es dans un "
.em("data frame").". \n" ;
00524     echo
"Les colonnes de ce "
.em("data frame")." sont automatiquement nomm&eacute;es par $R avec le nom des variables utilis&eacute;es. \n" ;
00525     echo
"Voici ces calculs&nbsp;: \n" ;
00526     
finp() ;
00527     
00528     
pre_fichier
("chideux1.txt","cadre") ;
00529     
00530     
p
("texte") ;
00531     echo
"Arriv&eacute; ici, nous disposons donc d&eacute;j&agrave; du tableau de r&eacute;sultats suivant&nbsp;:\n" ;
00532     
finp() ;
00533     
00534     
pre_fichier
("chideux2.txt","cadre") ;
00535     
00536     
p
("texte") ;
00537     echo
"Il reste donc &agrave; &agrave; trier le tableau par contribution, ce qu'on \n" ;
00538     echo
"r&eacute;alise &agrave; l'aide la fonction "
.hrrr("order").", \n" ;
00539     echo
"et &agrave; calculer les pourcentages de contributions, \n" ;
00540     echo
"ce que l'on peut \n" ;
00541     echo
"faire avec le code suivant \n" ;
00542     echo
"(on notera les deux notation "
.noir("df[,\"Pct\"]")." et ".noir("df\$Pct")." pour acc&eacute;der aux colonnes&nbsp;: \n" ;
00543     
finp() ;
00544     
00545     
pre_fichier
("chideux3.txt","cadre") ;
00546     
00547     
p
("texte") ;
00548     echo
"Pour v&eacute;rifier nos r&eacute;sultats, on peut comparer la somme de la colonne "
.b("Cntr")." &agrave; la valeur du &chi;".sup(2)." fourni \n" ;
00549     echo
"par
$R via la fonction ".hrrr("chisq.test","stats")." du package ".hrrp("stats")."&nbsp;:\n" ;
00550     
finp() ;
00551     
00552     
pre_fichier
("chideux4.txt","cadre") ;
00553     
00554     
p
("texte") ;
00555     echo
"On voit alors qu'on trouve la m&ecirc;me valeur "
.b("65.382")." &agrave; l'arrondi pr&egrave;s du calcul, mais il est pr&eacute;f&eacute;rable de le v&eacute;rifier \n" ;
00556     echo
"avec le code suivant&nbsp;: \n" ;
00557     
finp() ;
00558     
00559     
pre_fichier
("chideux5.txt","cadre") ;
00560     
00561     
p
("texte") ;
00562     echo
" Ici, nous sommes oblig&eacute;s d'utiliser "
.noir("as.numeric()")." parce que la statistique de test est une ".b("variable nomm&eacute;e")."&nbsp;; \n" ;
00563     echo
" du coup, sa simple comparaison avec la somme des contributions &eacute;choue&nbsp;: \n" ;
00564     
finp() ;
00565     
00566     
pre_fichier
("chideux6.txt","cadre") ;
00567     
00568     
p
("texte") ;
00569     echo
" Au passage, rappelons que le code de nombreuses fonctions
$R est consulatable. " ;
00570     echo
" On trouvera ci-dessous celui de la fonction "
.hrrr("chisq.test","stats")." dont le coeur de calcul " ;
00571     echo
b
("STATISTIC&nbsp;&lt;-&nbsp;sum((x-E)^2/E)")." correspond " ;
00572     echo
" exactement &agrave; notre calcul vectoriel." ;
00573     
finp() ;
00574     
00575     
pre_fichier
("chideux7.txt","cadre") ;
00576     
00577     
finsolution() ;
00578     
00579     
finblockquote() ;
00580     
00581     
## -------------------------------------------------------------------------------------------
00582     
00583     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Arbre syntaxique abstrait d'une expression
00584     
00585     ## -------------------------------------------------------------------------------------------
00586     
00587     
blockquote() ;
00588     
00589     
blockquote() ;
00590     
00591     
p
("texte") ;
00592     echo
" Que fait la fonction "
.b("ast") ;
00593     echo
" du package "
.href("https://github.com/r-lib/lobstr","lobstr")."&nbsp?" ;
00594     
finp() ;
00595     
00596     
p
("texte") ;
00597     echo
" Installer ce package et ex&eacute;cuter les instructions suivantes " ;
00598     
finp() ;
00599     
00600     
pre_fichier
("ast01.txt","cadre") ;
00601     
00602     
finblockquote() ;
00603     
00604     
solution
($numExo,$numSerie) ;
00605     
00606     
p
("texte") ;
00607     echo
" La fonction "
.b("ast")." fournit la repr&eacute;sentation interne d'une instruction. " ;
00608     echo
" Cela permet entre autres de voir que l'affectation, l'indexation en crochets et m&ecirc;me l'instruction "
.em("if")." sont des fonctions comme les autres." ;
00609     
finp() ;
00610     
00611     
p
("texte") ;
00612     
nbsp
(5) ;
00613     
$img
= "ast.png" ;
00614     echo
href
($img,img($img,"",500)) ;
00615     
finp() ;
00616     
00617     
finsolution() ;
00618     
00619     
finblockquote() ;
00620     
00621     
## -------------------------------------------------------------------------------------------
00622     
00623     
finPageExercices
($numSerie) ; # contient finSection() et finPage() ; la fonction est dans progi.php
00624     
00625     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)