Chapitre 5 tests conditionnels, boucles et fonctions

Slides:



Advertisements
Présentations similaires
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Advertisements

Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Scripts et fonctions Instructions de contrôle
Formation des enseignants Formation MATLAB. Formation des enseignants MATLAB® (pour MATrix LABoratory) est un logiciel scientifique de calcul numérique.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
IFT359 – Programmation fonctionnelle Thème 02 B partie A introduction au langage fonctionnel choisi 1.
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
Cours 7 Programmation de base. Boucles et Tests for( in ) { } while( ) { } Exemple: x=rep(5,0) for (i in 1:5) x[i]=2*i+1 Les fonctions du type apply(),replicate()
Cours 3 statistiques avec R. Lois de probabilité, distributions On peut évaluer les quantités suivantes: Fonctions de répartition Densité Quantiles Simulations.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Cours 4 Compléments Quelques résumés statistiques.
UE2 - M22 Licence acoustique
Tableaux en C Mardi 2/05.
Le Langage JavaScript pour le web
Semaine 8 Retour sur les tableaux : fonctions et récursivité
Ajouter le code dans une page html
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Algorithmiques Abdelbasset KABOU
Chapitre 4 manipulation de données
Algorithmique et programmation de modèles numériques
Instructions de contrôle
Semaine #1 INF130 par Frédérick Henri.
Javadoc et débogueur Semaine 03 Version A17.
Algorithmiques Abdelbasset KABOU
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
2°) Déterminez l’organigramme pour déterminer les diviseurs d’un nombre ( premier ou pas ). Méthode : on va …
Alternative : syntaxe CSharp
Un Algorithme , c'est Quoi ?
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Langages de programmation TP3
République Algérienne Démocratique et Populaire Ministère de l'Enseignement Supérieur et de la Recherche Scientifique Université Saad.
Week 1 Lecture 1 Introduction à R L3PRO 2017.
Codage Indenter le code Limiter la portée des variables Traiter les erreurs en premier Utiliser le switch au delà de 3 tests en cascades Ne jamais utiliser.
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Science du traitement rationnel de l'information
Cours N°9: Algorithmiques Les Tableaux 1
Les tableaux.
4.2 Estimation d’une moyenne
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Calcul Scientifique Initiation à SCILB
Eléments de base du langage C
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
Royaume de Maroc Université Hassan Premier Settat Faculté des Sciences et Techniques de Settat LA CLASSIFICATION K-MEANS SOUS R /MATLAB Master :Automatique.
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
Les classes et les objets
Présentation 5 : Sondage à probabilités inégales
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Exercice : Soient les fonctions définies sur N ( ensemble des entiers naturels donc positifs ) par : f(x) = - 2x + 6 ; g(x) = x + 1 ; k(x) = la plus.
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
Définition : 2 Les structures de contrôle conditionnelles permettent à un programme de modifier son traitement en fonction d’une condition.
Structure de données utiles
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Flowchart Itération Cours 04.
Programme d’appui à la gestion publique et aux statistiques
Quelle est la valeur de S après exécution des instructions suivantes :
GEOMETRIE VECTORIELLE
Introduction à L’Informatique
2°) Déterminez l’organigramme pour déterminer les diviseurs d’un nombre ( premier ou pas ). Méthode : on va …
Python Nicolas THIBAULT
Eléments de base du langage C
PROGRAMMATION SOUS R. PRESENTE PAR : ACHETTOU ISMAIL LAARICH TARIQ ENCADRE PAR : Pr. EXPOSÉ SUR LA PROGRAMMATION SUR R 2.
Transcription de la présentation:

Chapitre 5 tests conditionnels, boucles et fonctions Programmation en R

Introduction # Comme tout langage de programmation, R permet de programmer des test conditionnels et des boucles, ainsi que de définir ses propres fonctions. # Nous allons aborder les éléments suivants: # - tests conditionnels if-else # - boucles for # - boucles while # - boucles repeat # - création de fonctions

Tests conditionnels « if-else » # La syntaxe d'un test conditionnel est la suivante: #if (condition){ # instructions 1... #} else{ # instructions 2... #} # Un test conditionnel se comprend de la manière suivante: # Si "condition" est vraie, alors "instuctions 1" sont exécutées; sinon, ce sont "instructions 2" qui sont exécutées. # La clause "else" est facultative. # L'accolade fermante du "if" et le "else" doivent être sur la même ligne.

Tests conditionnels « if-else » # on génère un nombre aléatoire à partir d'une loi uniforme x <- runif(1, 0, 10) if (x > 5){ print("le nombre tiré est plus grand que 5") } else{ print("le nombre tiré est plus petit ou égal à que 5") } [1] "le nombre tiré est plus grand que 5"

Tests conditionnels « if-else » # Si on désire multiplier les conditions, on peut rajouter des "else if (condition)..." à volonté. x <- runif(1, 0, 10) if (x > 5){ print("le nombre tiré est plus grand que 5") } else if (x < 5) { print("le nombre tiré est plus petit que 5") } else { print("le nombre vaut 5") } [1] "le nombre tiré est plus petit que 5"

Boucles « for » # Les boucles "for" sont les plus importantes. # La syntaxe d'une boucle "for" est la suivante: # for (variable in structure_de_données){ # instructions... #} # Une boucle "for" se comprend de la manière suivante: # pour "variable" prenant successivement toutes les valeurs de "structure_de_données", exécuter les "instructions"... # L'élément "structure_de_données" peut être un vecteur, une liste, une matrice, un tableau, un data frame, etc. # Les instructions "next" et "break" permettent de sauter une itération ou d'intrrompre la boucle, respectivement.

Boucles « for » # Lorsque la structure de données parcourue est un vecteur ou une liste, la variable de la boucle "for" la parcourt dans le sens évident. # En général, la boucle "for" s'utilise sur un vecteur généré par la fonction seq(). for (i in seq(from=5, to=25, by=5)){ print(i) } [1] 5 [1] 10 [1] 15 [1] 20 [1] 25

Boucles « for » # La structure de données n'a pas besoin d'être numérique. s <- c("a", "b", "c") for (x in s){ print(x) } [1] "a” [1] "b” [1] "c"

Boucles « for » # Lorsque la structure de données parcourue est une matrice, la variable de la boucle "for" la parcourt ligne par ligne. X <- matrix(c(1,1,1,2,2,2), 2, 3) # 2 lignes, 3 colonnes for (i in X){ print(i) } [1] 1 [1] 2

Boucles « for » # Lorsque la structure de données parcourue est un data frame, la variable de la boucle "for" la parcourt colonne par colonne. D <- data.frame(col1 = c("a", "b", "c"), col2 = c(1, 2, 3), col3 = c(T, F, T)) for (v in D){ print(v) } [1] a b c Levels: a b c [1] 1 2 3 [1] TRUE FALSE TRUE

Boucles « for » # On peut bien évidemment faire des boucles imbriquées. # la fonction seq_len renvoie la taille d'une séquence. x <- matrix(1:6, 2, 3) for(i in seq_len(nrow(x))) { for(j in seq_len(ncol(x))) { print(x[i, j]) } [1] 1 [1] 3 [1] 5 [1] 2 [1] 4 [1] 6

Boucles « while » # La syntaxe d'une boucle "while" est la suivante: # while (condition){ # instructions... #} # Une boucle "while" se comprend de la manière suivante: # tant que "condition" est vraie, exécuter les "instructions"...

Boucles « while » count <- 0 while (count < 5){ print(count) count <- count + 1 # incrémente count } [1] 0 [1] 1 [1] 2 [1] 3 [1] 4

Boucles « while » # On simule une marche aléatoire z <- 5 z_walk <- c() while (z >= 3 && z <= 10){ coin <- rbinom(1, 1, 0.5) # flip a fair coin if (coin == 1){ z <- z + 1 z_walk <- append(z_walk, "Right") } else { z <- z - 1 z_walk <- append(z_walk, "Left") } print(z_walk) [1] "Right" "Right" "Right" "Right" "Right" "Left" ...

Boucles « repeat » # La syntaxe d'une boucle "repeat" est la suivante: # repeat { # instructions... #} # Une boucle "repeat" se comprend de la manière suivante: # répéter à l'infini les "instructions"... # Ainsi, puisqu'il faut bien que la boucle se stoppe, il faudra forcément inclure une instruction break dans les "instructions".

Boucles « repeat » # On génère des jets de pièces jusqu'à ce qu'une séquence de 5 piles ou 5 faces de suite soit générée. # Ça peut être long... (ou ne jamais arriver?) h <- c() # vecteur qui enrégistrera l'histoire de la pièce # On flip une "fair coin" 5 fois pour commencer for (i in seq(1,5,1)){ h <- append(h, rbinom(1, 1, 0.5)) } # On continue à flipper des "fair coins" jusqu'à ce qu'une séquence de 5 piles ou 5 faces de suite soit générée.

Boucles « repeat » repeat { # on selectionne les 5 derniers éléments de history h_tail <- h[seq(length(h)-4,length(h),1)] # si ce sont cinq 0's ou cinq 1's, on "break" la boucle # h_tail == 0 ou h_tail == 1 génère un # vecteur booléen de taille 5 # s'il se somme à 1, c'est que tous les éléments # valent 0 ou 1 if (sum(h_tail == 1) == 5 | (sum(h_tail == 0) == 5)) { break } else { # on reflip la "fair coin" et ajoute le résultat # à history h <- append(h, rbinom(1, 1, 0.5)) }

Boucles « repeat » print(h) [1] 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 [22] 1 1 0 1 0 1 1 0 0 1 1 0 0 0 0 0 # on a bien terminé avec un séquence de 5 faces de suite.

Fonctions # Comme pour tout langage de programmation, en R, il est possible et utile de définir ses propres fonctions. # Pour définir une fonction, on utilise le mot-clé "function". # La syntaxe de la définition d'une fonction est la suivante: # nom_fonction <- function(arguments) instructions... # ou alors, sur plusieurs lignes: # nom_fonction <- function(arguments){ # instructions... # } # Si l'on désire que la fonction retourne explicitement un résultat, on utilise la fonction return().

Fonctions # On reprogramme l'addition. f1 <- function(x, y) x + y f1(2,7) [1] 9 # Une fonction qui calcule le volume d'une sphère. volume_sphere <- function(rayon) { return((4/3)*pi*rayon^3) # avec return } volume_sphere(3) [1] 113.0973

Fonctions # On définit une fonction "norm" qui calcule la norme d'un vecteur de taille quelconque. norm <- function(v) { sqrt(sum(v^2)) } norm(c(3, 4)) # = sqrt(3^2 + 4^2) [1] 5 norm(c(1, 7, -3)) [1] 7.681146 norm(c(22, -7, 4, 5, -14)) [1] 27.74887

Fonctions # Comme souvent, les variables définies à l'intérieur d'une fonction sont locales! # Elles n'écrasent pas les variables du même nom définie à l'extérieur de la fonction, dites globales. v <- c("a", "b", "c") # variable globale f2 <- function(a, b){ v <- c(1, 2, 3) # variable locale return(a*v + b) } f2(5,8) [1] 13 18 23 v [1] "a" "b" "c" # la variable globale v a gardé sa valeur (globale).

Fonctions # On peut assigner des valeurs par défaut aux arguments, auquel cas ils deviennent optionnels; la syntaxe est: # arg = val_par_défaut. # Fonction qui calclule la combinaison linéaire a*x + b (a, b réels et x vecteur). comb_lin <- function(a = 1, x = c(1), b = 1){ a * x + b } comb_lin(3, c(1, 2, 3), 5) [1] 8 11 14 comb_lin(c(1, 2, 3)) # a et b valent 1 par défaut [1] 2 3 4 # Si on les nomme, on peut donner les arguments dans le mauvais ordre. comb_lin(x = c(1, 2, 3), a = 3) # b vaut 1 par défaut [1] 4 7 10

Fonctions # Il est utile de pouvoir créer des fonctions qui prennent un nombre variable d'arguments. On utilise la fameuse syntaxe "...". # la fonction summary fournit un résumé des statistiques de base d'un échantillon. v <- sqrt(1:100) # initialisation d'un échantillon resume <- function(message,...){ print(message) summary(...) # tous les argument "..." sont passés # dans summary }

Fonctions resume("Résumé de votre échantillon", v, digits = 3) # Dans ce cas, tout ce qui vient après le premier argument, à savoir "v, digits = 3" est compris comme "..." et passé à la fonction summary. [1] "Résumé de votre échantillon" Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 5.07 7.11 6.71 8.67 10.00

Exemple # On programme une fonction qui cherche le point fixe d'une autre fonction, s'il existe. # On utilise l'algorithme de point fixe classique: # x_0 = point de départ # x_N = f(x_N-1) pout n = 1,2,3,... # Répéter l'étape jusqu'à ce que |x_n - x_n-1| < epsilon. # Si la fonction n'a pas de point fixe, l'algorithme ne va pas converger.

point_fixe <- function(f, x_0, nb_it = 1000, epsilon = 1e-10){ x_N <- x_0 # variable locale iteration <- 1 # variable locale repeat{ erreur <- abs(x_N - f(x_N)) # variable locale if (erreur < epsilon) { # on retourne le résultat resultat <- c(x_N, f(x_N), iteration) break } else if (iteration > nb_it){ # pas de résultat print("Pas de convergence...") resultat <- c("NaN", iteration) } else { # on continue les itérations iteration <- iteration + 1 x_N <- f(x_N) return(resultat)

Exemple # On cherche un point fixe de la fonction cosinus à partir de x_0 = 0.3 point_fixe(cos, 0.3) [1] 0.7390851 0.7390851 58.0000000