Valid XHTML     Valid CSS2    

Introduction à la programmation R (exercices)

Séance 2 : Affectations, structures de données et affichages

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Permutation (simple) de variables

  2. «Règles» d'écriture des noms de variables

  3. Calculs et affichages avec le symbole deux-points

  4. Pourcentages et normalisation

  5. Valeurs spéciales en R

  6. La fonction rep

  7. Souligner une phrase

  8. Les subtilités de la fonction cat()

  9. Calcul du χ2 d'adéquation avec contributions

10. Arbre syntaxique abstrait d'une expression

 
Il est possible d'afficher toutes les solutions via ?solutions=1 et de toutes les masquer avec via ?solutions=0.

 

1. Permutation (simple) de variables

On dispose de deux valeurs a et b dont le contenu peut être numérique, texte ou autre (ce sont peut-être des listes). Trouver une façon simple de sauvegarder le contenu de chaque variable avant de les permuter, sans doute en quatre instructions (commentaires non compris).

Quelle est la solution classique en trois instructions, nommée "permutation circulaire" ?

Solution :  

 

2. «Règles» d'écriture des noms de variables

Il est d'usage d'utiliser au moins trois ou quatre lettres pour les identifiants de variables, comme nbl ou nblignes pour indiquer le nombre de lignes, au lieu d'un simple n. Quelles sont les conventions d'écriture ? Laquelle fournit les identificateurs les plus lisibles ?

Solution :  

 

3. Calculs et affichages avec le symbole deux-points

On suppose que n contient 10. Trouver comment générer :

  • tous les nombres de 1 à n2

  • le carré des nombres de 1 à n

  • les n premiers nombres pairs, impairs

  • les n premières puissances de 10

  • les n premières lettres de l'alphabet

Solution :  

 

4. Pourcentages et normalisation

On suppose que le vecteur v contient des valeurs numériques. Trouver les instructions qui permettent d'afficher 

  • le vecteur normalisé issu de v (on divise par le max, la plus grande valeur est 1)

  • le vecteur centré issu de v (on soustrait la moyenne, la moyenne devient 0)

  • les pourcentages associés aux valeurs de v avec 2 décimales

Voici, si v contient les nombres 5 12 8, ce qu'on veut obtenir :


     vecteur original
     5 12 8
     
     vecteur normalisé (max=1)
     
     0.4166667 1.0000000 0.6666667
     
     vecteur centré (moyenne=0)
     
     -3.3333333  3.6666667 -0.3333333
     
     pourcentages avec deux décimales
     
     " 20.00 %" " 48.00 %" " 32.00 %"
     

Solution :  

 

5. Valeurs spéciales en R

On veut créer le vecteur resultats. Sa première valeur est 5, sa troisième valeur est 8 mais pour l'instant on ne connait pas la valeur numéro deux. Comment faire ?

Dans le cours de la séance 2, comme dans les autres cours, il y a de nombreux liens sur l'aide en ligne des fonctions en R sous les mots en vert. Après avoir relu celle sur NULL, NaN, Inf, essayer de construire des expressions qui renvoient ces valeurs. Quelle est leur "classe" ? Peut-on leur ajouter 1, les utiliser dans des comparaisons ? Compléter avec les valeurs TRUE et FALSE.

Solution :  

 

6. La fonction rep

Après avoir lu l'aide sur la fonction rep() et la fonction vector() essayer de produire un vecteur qui contient 10 fois la valeur 0 puis un autre vecteur qui contient 20 valeurs à savoir des 0 et des 1 en alternance puis 11 fois 0 suivis de 10 fois 1. Enfin, essayer de produire le vecteur 1 -2 3 -4...

Au passage, comment afficher un vecteur en colonne, avec le numéro de l'élément devant sa valeur comme ci-dessous ?


     [1]   1
     [2]  -2
     [3]   3
     [4]  -4
     [5]   5
     

Que contient la variable x si on la définit par x <- vector(length=8) ?

Solution :  

 

7. Souligner une phrase

On voudrait souligner avec le caractère "égal" un titre ou une phrase, comme dans l'exemple suivant où on a souligné le texte "un exemple de soulignement". Comment réaliser cela avec un seul appel de la fonction cat() ? On utilisera, «bien sûr», les fonctions nchar(), rep() et paste().


     
     un exemple de soulignement
     ==========================
     
     

Solution :  

 

8. Les subtilités de la fonction cat()

Est-ce que l'instruction cat(x,y) est équivalente aux deux instructions cat(x) ; cat(y) ?

Comment doit-on afficher des informations sur deux lignes différentes, comme par exemple Bonjour et Bonsoir ?

Quels sont les autres paramètres de la fonction cat() ?

Solution :  

 

9. Calcul du χ2 d'adéquation avec contributions

On dispose d'un vecteur Vobs d'effectifs observés et d'un vecteur Vthe d'effectifs théoriques. Comment effectuer le calcul et le cumul des carrés pondérés des différences relatives entre valeurs observées et valeurs théoriques (ou "contributions") que l'on triera par ordre croissant de pourcentage par rapport au total des contributions en n'utilisant que des affectations ?

Avec quelle fonction de R peut-on vérifier que le résultat de ces calculs est correct ?

On pourra, pour les vecteurs numériques définis par Vobs <- c(18,55,21,12,4) et Vthe <- c(6.875,27.5,41.25,27.5,6.875), s'inspirer de la présentation suivante pour afficher les résultats :


     Ind   Vthe Vobs     Dif      Cntr       Pct     Cumul
       2 27.500   55 -27.500 27.500000 42.060623  42.06062
       1  6.875   18 -11.125 18.002273 27.534066  69.59469
       3 41.250   21  20.250  9.940909 15.204394  84.79908
       4 27.500   12  15.500  8.736364 13.362069  98.16115
       5  6.875    4   2.875  1.202273  1.838849 100.00000
     

Solution :  

 

10. Arbre syntaxique abstrait d'une expression

Que fait la fonction ast du package lobstr ?

Installer ce package et exécuter les instructions suivantes


     library("lobstr")
     
     # expression 1
     
     ast( n <- 8 )
     
     # expression 2
     
     ast( print( n[5] <- "2" ) )
     
     # expression 3
     
     ast(
     
      {
         x <- 3 ;
         if ( x > 0) {
           cat(" positif ")
         } else {
           cat(x," n'est pas positif ")
         } # fin de si
      }
     
     ) # fin de ast
     
     

Solution :  

 

 

Code-source php de cette page. Retour à la page principale du cours.

 

 

retour gH    Retour à la page principale de   (gH)