{"id":2035,"date":"2026-10-14T18:00:47","date_gmt":"2026-10-14T18:00:47","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-utiliser-fonctions-min-max-dans-r-exemples\/"},"modified":"2026-10-14T18:00:47","modified_gmt":"2026-10-14T18:00:47","slug":"comment-utiliser-fonctions-min-max-dans-r-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-utiliser-fonctions-min-max-dans-r-exemples","title":{"rendered":"Comment utiliser les fonctions Min et Max dans R (avec des exemples)"},"content":{"rendered":"<p>L&rsquo;analyse empirique des donn\u00e9es dans les disciplines quantitatives modernes repose sur une exigence fondamentale : la compr\u00e9hension exhaustive de la morphologie des distributions observ\u00e9es. Que l&rsquo;on explore les neurosciences computationnelles, la biom\u00e9trie clinique ou la psychom\u00e9trie comportementale, la capacit\u00e9 \u00e0 cerner les fronti\u00e8res num\u00e9riques d&rsquo;un ph\u00e9nom\u00e8ne conditionne l&rsquo;ensemble des inf\u00e9rences statistiques ult\u00e9rieures. Dans l&rsquo;\u00e9cosyst\u00e8me du langage R, con\u00e7u nativement pour le traitement math\u00e9matique et la manipulation des structures matricielles, les fonctions <strong>min()<\/strong> et <strong>max()<\/strong> incarnent les primitives indispensables de cette caract\u00e9risation liminaire. Bien que d&rsquo;apparence \u00e9l\u00e9mentaire, ces fonctions encapsulent des comportements algorithmiques sophistiqu\u00e9s r\u00e9gis par les normes de l&rsquo;arithm\u00e9tique en virgule flottante et le syst\u00e8me de typage strict des vecteurs atomiques.<\/p>\n<p>Trop souvent r\u00e9duites \u00e0 de simples outils de commodit\u00e9 programmatique, ces fonctions d&rsquo;extrema constituent en r\u00e9alit\u00e9 le pivot m\u00e9thodologique permettant de valider l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es brutes, de d\u00e9tecter les anomalies de mesure, d&rsquo;estimer les \u00e9tendues d&rsquo;\u00e9chantillonnage et de contraindre les mod\u00e8les probabilistes dans des intervalles physiquement plausibles. La ma\u00eetrise de leurs nuances op\u00e9rationnelles \u2014 de la propagation d\u00e9terministe des valeurs manquantes aux subtilit\u00e9s de la coercition de type, en passant par leurs d\u00e9clinaisons vectoris\u00e9es comme <strong>pmin()<\/strong>, <strong>pmax()<\/strong> ou encore leurs variantes d&rsquo;indexation spatiale <strong>which.min()<\/strong> et <strong>which.max()<\/strong> \u2014 s\u00e9pare l&rsquo;analyse superficielle d&rsquo;une d\u00e9marche d&rsquo;ing\u00e9nierie de donn\u00e9es rigoureuse et reproductible.<\/p>\n<p>Ce guide exhaustif a pour vocation d&rsquo;analyser en profondeur les m\u00e9canismes sous-jacents, les signatures formelles et les cas d&rsquo;usage avanc\u00e9s des fonctions <strong>min()<\/strong> et <strong>max()<\/strong> au sein du langage <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">R Project for Statistical Computing<\/a>. \u00c0 travers une progression didactique int\u00e9grant la th\u00e9orie computationnelle, la manipulation vectorielle, le paradigme moderne du Tidyverse et des \u00e9tudes de cas d\u00e9taill\u00e9es issues de la recherche exp\u00e9rimentale en psychologie cognitive et neurosciences, nous explorerons chaque facette de ces op\u00e9rateurs fondamentaux pour vous permettre d&rsquo;optimiser la robustesse et la performance de vos pipelines analytiques.<\/p>\n<h2>1. Introduction aux fonctions statistiques fondamentales min() et max() en R<\/h2>\n<h3>1.1 R\u00f4le de l&rsquo;analyse exploratoire des donn\u00e9es dans les sciences quantitatives<\/h3>\n<p>L&rsquo;analyse exploratoire des donn\u00e9es (Exploratory Data Analysis ou EDA), formalis\u00e9e initialement par le statisticien John Tukey, postule que la premi\u00e8re \u00e9tape indispensable \u00e0 tout traitement quantitatif r\u00e9side dans l&rsquo;examen minutieux de la structure interne des donn\u00e9es sans postulat probabiliste a priori. Dans ce cadre \u00e9pist\u00e9mologique, la d\u00e9tection des bornes empiriques constitue le premier rempart contre les conclusions erron\u00e9es. Lorsqu&rsquo;un jeu de donn\u00e9es est recueilli, les extrema observ\u00e9s traduisent imm\u00e9diatement la conformit\u00e9 du protocole exp\u00e9rimental avec les lois de la physique ou les postulats th\u00e9oriques du domaine \u00e9tudi\u00e9. Identifier le point le plus bas et le point le plus haut d&rsquo;une s\u00e9rie num\u00e9rique permet de v\u00e9rifier l&rsquo;\u00e9chelle d&rsquo;observation et de s&rsquo;assurer qu&rsquo;aucun artefact instrumental n&rsquo;a d\u00e9natur\u00e9 le signal.<\/p>\n<p>Dans les sciences du comportement et les disciplines biom\u00e9dicales, la v\u00e9rification de l&rsquo;int\u00e9grit\u00e9 des instruments de mesure et des \u00e9chelles psychom\u00e9triques passe obligatoirement par cet examen des bornes. Si un chercheur administre une \u00e9chelle d&rsquo;\u00e9valuation de la symptomatologie d\u00e9pressive th\u00e9oriquement born\u00e9e entre 0 et 63 points, l&rsquo;apparition d&rsquo;un minimum n\u00e9gatif ou d&rsquo;un maximum exc\u00e9dant le seuil th\u00e9orique met instantan\u00e9ment en lumi\u00e8re une erreur de saisie, un dysfonctionnement de num\u00e9risation ou un bogue de transcription dans la base de donn\u00e9es relationnelle. L&rsquo;observation des bornes empiriques sert donc de test de validit\u00e9 interne non param\u00e9trique pr\u00e9alable \u00e0 tout calcul d&rsquo;indice de tendance centrale comme la moyenne arithm\u00e9tique ou la m\u00e9diane.<\/p>\n<p>Enfin, l&rsquo;identification rapide des seuils critiques dans les distributions d&rsquo;\u00e9chantillons conditionne le rep\u00e9rage de singularit\u00e9s math\u00e9matiques telles que les valeurs aberrantes (outliers), les asym\u00e9tries de distribution prononc\u00e9es ou encore les bruits de fond instrumentaux. Les extrema empiriques renseignent instantan\u00e9ment le chercheur sur la compacit\u00e9 de sa distribution. Une \u00e9tendue anormalement resserr\u00e9e ou excessivement dilat\u00e9e guide le choix des tests d&rsquo;hypoth\u00e8ses futurs, orientant le statisticien vers des approches robustes, des transformations logarithmiques ou le recours \u00e0 des mod\u00e8les lin\u00e9aires g\u00e9n\u00e9ralis\u00e9s adapt\u00e9s aux fonctions de lien non gaussiennes.<\/p>\n<h3>1.2 D\u00e9finition formelle et utilit\u00e9 des primitives min() et max()<\/h3>\n<p>Au c\u0153ur de l&rsquo;architecture logicielle de R, les fonctions <strong>min()<\/strong> et <strong>max()<\/strong> appartiennent au groupe fondamental des fonctions g\u00e9n\u00e9riques internes d\u00e9sign\u00e9es sous le terme de primitives du socle <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-intro.html\">R Base<\/a>. Contrairement \u00e0 des fonctions interpr\u00e9t\u00e9es \u00e9crites en code R pur au sein de paquetages tiers, ces primitives sont impl\u00e9ment\u00e9es directement au niveau de la couche syst\u00e8me en langage C sous-jacent. Ce positionnement architectural garantit une vitesse d&rsquo;ex\u00e9cution optimale et une surcharge de m\u00e9moire minimale lors de l&rsquo;\u00e9valuation des extrema absolus sur des structures de donn\u00e9es volumineuses contenant des millions d&rsquo;observations.<\/p>\n<p>Leur fonctionnement intrins\u00e8que repose sur l&rsquo;\u00e9valuation s\u00e9quentielle et d\u00e9terministe d&rsquo;un ensemble de scalaires atomiques afin de renvoyer, respectivement, la plus petite et la plus grande valeur ordonn\u00e9e selon les r\u00e8gles d&rsquo;alg\u00e8bre binaire d\u00e9finies par le syst\u00e8me d&rsquo;exploitation et la norme internationale IEEE 754 pour les nombres \u00e0 virgule flottante. Il est capital d&rsquo;op\u00e9rer une distinction formelle entre ces fonctions d&rsquo;agr\u00e9gation globale et les fonctions vectoris\u00e9es parall\u00e8les. Alors que <strong>min()<\/strong> et <strong>max()<\/strong> r\u00e9duisent un ensemble multidimensionnel ou un vecteur de dimension arbitraire \u00e0 un unique scalaire atomique de dimension 1, les fonctions homologues dites parall\u00e8les effectuent des comparaisons \u00e9l\u00e9ment par \u00e9l\u00e9ment en conservant la dimension d&rsquo;origine des arguments transmis.<\/p>\n<p>L&rsquo;absence totale de d\u00e9pendances externes renforce la centralit\u00e9 de <strong>min()<\/strong> et <strong>max()<\/strong> dans les environnements de production et les scripts de recherche hautement reproductibles. Appartenant au paquetage <em>base<\/em>, elles sont charg\u00e9es nativement dans chaque session R sans n\u00e9cessiter l&rsquo;appel \u00e0 une quelconque biblioth\u00e8que tierce via la directive library(). Cette autonomie algorithmique assure une portabilit\u00e9 int\u00e9grale des scripts d&rsquo;analyse sur l&rsquo;ensemble des syst\u00e8mes d&rsquo;exploitation (Linux, macOS, Windows) et pr\u00e9vient les ruptures de compatibilit\u00e9 ascendante qui peuvent ponctuer le cycle de vie des biblioth\u00e8ques logicielles contemporaines.<\/p>\n<h3>1.3 Applications types dans le traitement des donn\u00e9es comportementales<\/h3>\n<p>Le traitement des donn\u00e9es issues de protocoles exp\u00e9rimentaux comportementaux illustre avec acuit\u00e9 la polyvalence de <strong>min()<\/strong> et <strong>max()<\/strong>. Prenons l&rsquo;exemple du contr\u00f4le des plages de validit\u00e9 sur des questionnaires standardis\u00e9s de type Likert en psychom\u00e9trie. Ces instruments requi\u00e8rent g\u00e9n\u00e9ralement que les participants positionnent leur accord sur une \u00e9chelle gradu\u00e9e de 1 (pas du tout d&rsquo;accord) \u00e0 7 (totalement d&rsquo;accord). L&rsquo;\u00e9valuation automatis\u00e9e des scores via <strong>min(reponses)<\/strong> et <strong>max(reponses)<\/strong> permet d&rsquo;impl\u00e9menter des filtres logiques stricts : tout fichier de passation pr\u00e9sentant des bornes d\u00e9viantes est imm\u00e9diatement rejet\u00e9 ou dirig\u00e9 vers une proc\u00e9dure d&rsquo;audit de coh\u00e9rence.<\/p>\n<p>Dans le domaine de la psychologie cognitive et de la chronom\u00e9trie mentale, l&rsquo;examen des temps de r\u00e9action (TR) limites constitue une \u00e9tape d\u00e9terminante pour assurer la qualit\u00e9 m\u00e9thodologique des protocoles d&rsquo;attention visuelle ou de prise de d\u00e9cision perceptuelle. Les donn\u00e9es de temps de r\u00e9action brutes s&rsquo;\u00e9tendent souvent sur des plages disproportionn\u00e9es. Un temps de r\u00e9action minimal calcul\u00e9 avec <strong>min()<\/strong> qui se r\u00e9v\u00e8le inf\u00e9rieur \u00e0 100 ou 150 millisecondes signale sans ambigu\u00eft\u00e9 une r\u00e9ponse anticip\u00e9e, d\u00e9clench\u00e9e avant m\u00eame que le traitement visuel cortical du stimulus n&rsquo;ait pu biologiquement s&rsquo;op\u00e9rer. \u00c0 l&rsquo;inverse, un maximum exc\u00e9dant plusieurs secondes caract\u00e9rise un \u00e9pisode d&rsquo;inattention, une distraction de l&rsquo;op\u00e9rateur ou un ralentissement moteur pathologique n\u00e9cessitant un \u00e9lagage syst\u00e9matique avant l&rsquo;ajustement d&rsquo;un mod\u00e8le de diffusion drift-diffusion.<\/p>\n<p>Enfin, la validation globale des protocoles exp\u00e9rimentaux avant toute mod\u00e9lisation statistique avanc\u00e9e (telle que les mod\u00e8les lin\u00e9aires \u00e0 effets mixtes ou les \u00e9quations structurelles) requiert l&rsquo;\u00e9valuation conjointe des bornes de l&rsquo;ensemble des variables pr\u00e9dictives. Cette \u00e9tape permet d&rsquo;\u00e9viter l&rsquo;\u00e9chec d&rsquo;algorithmes d&rsquo;optimisation num\u00e9rique comme le gradient descendant ou le quasi-Newton : des pr\u00e9dicteurs comportant des valeurs extr\u00eames non normalis\u00e9es g\u00e9n\u00e8rent des matrices d&rsquo;information de Fisher mal conditionn\u00e9es, provoquant des erreurs de convergence logicielle irr\u00e9cup\u00e9rables.<\/p>\n<h2>2. Syntaxe fondamentale et signature algorithmique de min() et max()<\/h2>\n<h3>2.1 Anatomie formelle des signatures de fonction<\/h3>\n<p>D&rsquo;un point de vue programmatique, la formalisation de la signature de <strong>min()<\/strong> et <strong>max()<\/strong> dans la documentation de r\u00e9f\u00e9rence de R se pr\u00e9sente sous la forme suivante :<\/p>\n<p><strong>min(&#8230;, na.rm = FALSE)<\/strong><br \/><strong>max(&#8230;, na.rm = FALSE)<\/strong><\/p>\n<p>L&rsquo;\u00e9l\u00e9ment syntaxique central de cette signature r\u00e9side dans l&rsquo;op\u00e9rateur d&rsquo;ellipse d\u00e9sign\u00e9 par les trois points de suspension (&#8230;). Cet argument variadique conf\u00e8re aux fonctions la facult\u00e9 d&rsquo;accepter un nombre arbitraire d&rsquo;objets R sans n\u00e9cessiter leur imbrication pr\u00e9alable dans une structure de collection explicite. Un analyste peut ainsi transmettre concurremment un vecteur d&rsquo;entiers, un scalaire r\u00e9el, une matrice num\u00e9rique ou un ensemble de variables distinctes :<\/p>\n<p><em>min(vecteur_a, vecteur_b, scalaire_c)<\/em><\/p>\n<p>Sous le capot, l&rsquo;interpr\u00e9teur R proc\u00e8de \u00e0 une concat\u00e9nation implicite de tous les \u00e9l\u00e9ments transmis \u00e0 travers l&rsquo;op\u00e9rateur d&rsquo;ellipse au sein d&rsquo;une s\u00e9quence conceptuellement continue avant de d\u00e9rouler l&rsquo;algorithme d&rsquo;identification de l&rsquo;extremum. Le second argument formel, <strong>na.rm<\/strong>, est un param\u00e8tre logique (prenant les valeurs bool\u00e9ennes TRUE ou FALSE) dont la valeur par d\u00e9faut est toujours fix\u00e9e \u00e0 <em>FALSE<\/em>. Ce param\u00e8tre r\u00e9git de mani\u00e8re d\u00e9terministe le comportement de l&rsquo;interpr\u00e9teur lorsqu&rsquo;il rencontre des donn\u00e9es non disponibles ou manquantes durant l&rsquo;it\u00e9ration.<\/p>\n<h3>2.2 Typage des arguments d&rsquo;entr\u00e9e et compatibilit\u00e9 vectorielle<\/h3>\n<p>Le langage R repose sur une classification hi\u00e9rarchique de types atomiques : logical, integer, double, complex, character et raw. Les primitives <strong>min()<\/strong> et <strong>max()<\/strong> d\u00e9montrent une flexibilit\u00e9 d&rsquo;\u00e9valuation remarquable face \u00e0 ces types, bien que leur application privil\u00e9gi\u00e9e s&rsquo;articule autour des vecteurs num\u00e9riques r\u00e9els (double) et entiers (integer). Sur le plan des types num\u00e9riques, le calcul s&rsquo;effectue selon l&rsquo;ordre arithm\u00e9tique canonique sur le corps des r\u00e9els, g\u00e9rant nativement la mantisse et l&rsquo;exposant conform\u00e9ment \u00e0 la repr\u00e9sentation standard en pr\u00e9cision double.<\/p>\n<p>Concernant les vecteurs logiques, R applique une r\u00e8gle stricte de conversion implicite vers le type num\u00e9rique lors de l&rsquo;\u00e9valuation arithm\u00e9tique. La valeur bool\u00e9enne <em>FALSE<\/em> est assimil\u00e9e au z\u00e9ro (0), tandis que la valeur <em>TRUE<\/em> est assimil\u00e9e \u00e0 l&rsquo;unit\u00e9 (1). D\u00e8s lors, invoquer <strong>min()<\/strong> sur un vecteur bool\u00e9en permet d&rsquo;\u00e9valuer s&rsquo;il existe au moins une condition fausse dans l&rsquo;ensemble (renvoyant 0), ce qui constitue un \u00e9quivalent logique direct de la conjonction g\u00e9n\u00e9ralis\u00e9e, alors que <strong>max()<\/strong> permettra de d\u00e9tecter la pr\u00e9sence d&rsquo;au moins une condition vraie (renvoyant 1), agissant comme une disjonction g\u00e9n\u00e9ralis\u00e9e.<\/p>\n<p>Toutefois, une vigilance m\u00e9thodologique extr\u00eame s&rsquo;impose en cas de m\u00e9lange d&rsquo;arguments h\u00e9t\u00e9rog\u00e8nes en raison des r\u00e8gles universelles de coercition implicite de R. Selon cette taxonomie contraignante, l&rsquo;inclusion d&rsquo;une seule cha\u00eene de caract\u00e8res au sein d&rsquo;un ensemble d&rsquo;entiers force l&rsquo;\u00e9valuation de l&rsquo;int\u00e9gralit\u00e9 des arguments vers le type <em>character<\/em>. Dans ce sc\u00e9nario, le calcul statistique num\u00e9rique est subverti au profit d&rsquo;une comparaison lexicographique bas\u00e9e sur la table de codage ASCII ou UTF-8, transformant par inadvertance la s\u00e9mantique de l&rsquo;analyse :<\/p>\n<p><em>min(100, 2, \u00ab\u00a03\u00a0\u00bb)<\/em> ne renverra pas la valeur num\u00e9rique 2, mais la cha\u00eene \u00ab\u00a0100\u00a0\u00bb, car dans l&rsquo;ordre lexicographique standard, le caract\u00e8re \u00ab\u00a01\u00a0\u00bb pr\u00e9c\u00e8de le caract\u00e8re \u00ab\u00a02\u00a0\u00bb.<\/p>\n<h3>2.3 Nature de la valeur de retour<\/h3>\n<p>La r\u00e8gle fondamentale gouvernant le type de retour de <strong>min()<\/strong> et <strong>max()<\/strong> stipule que ces primitives garantissent toujours la restitution d&rsquo;un unique scalaire atomique de longueur 1 (un vecteur de longueur 1 en m\u00e9moire). Quelle que soit la dimension de la structure fournie en entr\u00e9e \u2014 qu&rsquo;il s&rsquo;agisse d&rsquo;un tableau \u00e0 deux dimensions, d&rsquo;un tenseur multidimensionnel de type <em>array<\/em> ou d&rsquo;une liste de nombres pass\u00e9s en arguments libres \u2014, la sortie est irr\u00e9m\u00e9diablement aplatie et r\u00e9duite \u00e0 un unique \u00e9l\u00e9ment scalaire.<\/p>\n<p>Sur le plan qualitatif, ces fonctions veillent rigoureusement \u00e0 la pr\u00e9servation de la classe et du type d&rsquo;origine des donn\u00e9es fournies, pour autant qu&rsquo;aucune coercition n&rsquo;ait \u00e9t\u00e9 impos\u00e9e. Si l&rsquo;\u00e9valuation porte strictement sur un vecteur d&rsquo;entiers (type <em>integer<\/em>), la valeur retourn\u00e9e conservera le marquage machine d&rsquo;un entier. De m\u00eame, si l&rsquo;argument d&rsquo;entr\u00e9e appartient \u00e0 la classe sp\u00e9cialis\u00e9e <em>Date<\/em> ou <em>POSIXct<\/em>, l&rsquo;extremum conserve les m\u00e9tadonn\u00e9es de classe associ\u00e9es, restituant une date valide sans d\u00e9gradation vers le format brut d&rsquo;entier num\u00e9rique sous-jacent repr\u00e9sentant le nombre de jours \u00e9coul\u00e9s depuis l&rsquo;origine unix.<\/p>\n<p>Sur le plan de l&rsquo;architecture physique, ce comportement demeure rigoureusement d\u00e9terministe sur les architectures informatiques 32 bits et 64 bits. R se conforme de fa\u00e7on stricte aux normes de l&rsquo;<a rel=\"noopener noreferrer\" href=\"https:\/\/standards.ieee.org\/standard\/754-2019.html\">IEEE (Institute of Electrical and Electronics Engineers)<\/a>. L&rsquo;\u00e9valuation de l&rsquo;ordre num\u00e9rique d&rsquo;\u00e9l\u00e9ments comparables renvoie une repr\u00e9sentation binaire sans ambig\u00fcit\u00e9, limitant les effets de bord li\u00e9s \u00e0 la compilation crois\u00e9e sur des grappes de calcul haute performance (HPC).<\/p>\n<h2>3. Application pratique sur des vecteurs num\u00e9riques \u00e9l\u00e9mentaires<\/h2>\n<h3>3.1 Calcul basique sur des vecteurs d&rsquo;entiers et de r\u00e9els<\/h3>\n<p>Dans la pratique analytique quotidienne, l&rsquo;op\u00e9rateur construit fr\u00e9quemment ses structures vectorielles primaires \u00e0 l&rsquo;aide de la fonction fondamentale de concat\u00e9nation <strong>c()<\/strong>. Consid\u00e9rons un vecteur de scores continus mesur\u00e9s chez un \u00e9chantillon d&rsquo;individus :<\/p>\n<p><em>scores &lt;- c(14.2, 18.5, 9.8, 12.0, 16.7, 9.8, 20.0)<\/em><\/p>\n<p>L&rsquo;extraction de l&rsquo;extremum inf\u00e9rieur s&rsquo;op\u00e8re par l&rsquo;invocation unitaire de <strong>min(scores)<\/strong>, qui renvoie imm\u00e9diatement la valeur r\u00e9elle 9.8. Corr\u00e9lativement, la borne sup\u00e9rieure est obtenue par <strong>max(scores)<\/strong>, g\u00e9n\u00e9rant en sortie le scalaire 20.0. Lorsque plusieurs occurrences identiques correspondent \u00e0 la valeur minimale ou maximale (comme le score 9.8 pr\u00e9sent \u00e0 deux reprises dans notre vecteur illustratif), ces fonctions renvoient l&rsquo;unique valeur commune sans duplication, illustrant leur r\u00f4le de r\u00e9duction ensembliste d&rsquo;extrema absolus.<\/p>\n<p>Le traitement des donn\u00e9es discr\u00e8tes compos\u00e9es exclusivement d&rsquo;entiers (not\u00e9s en R au moyen du suffixe L pour expliciter l&rsquo;allocation enti\u00e8re au compilateur, par exemple <em>c(12L, 4L, 19L)<\/em>) renvoie rigoureusement un entier. La comparaison entre donn\u00e9es continues et discr\u00e8tes ne soul\u00e8ve aucune divergence de syntaxe, soulignant la coh\u00e9rence interne du moteur d&rsquo;\u00e9valuation de R. Cependant, l&rsquo;analyste doit garder \u00e0 l&rsquo;esprit que l&rsquo;affichage console formate souvent les r\u00e9els et entiers de fa\u00e7on homog\u00e8ne, masquant le typage m\u00e9moire interne que l&rsquo;on peut interroger au moyen de la commande <em>typeof()<\/em>.<\/p>\n<h3>3.2 Traitement des valeurs infinies (-Inf et +Inf)<\/h3>\n<p>L&rsquo;environnement R int\u00e8gre une formalisation explicite des limites asymptotiques du plan complexe et de la droite r\u00e9elle achev\u00e9e au travers des symboles math\u00e9matiques <strong>-Inf<\/strong> (moins l&rsquo;infini) et <strong>+Inf<\/strong> (plus l&rsquo;infini). Ces entit\u00e9s surviennent typiquement \u00e0 la suite de calculs arithm\u00e9tiques invalides mais tol\u00e9r\u00e9s par la norme IEEE 754, tels qu&rsquo;une division scalaire par z\u00e9ro d&rsquo;un nombre positif ou n\u00e9gatif, ou \u00e0 la suite d&rsquo;un d\u00e9bordement exponentiel majeur :<\/p>\n<p><em>valeurs &lt;- c(12, 45, 100, -Inf, 89)<\/em><\/p>\n<p>Dans cette configuration, l&rsquo;application de <strong>min(valeurs)<\/strong> produira in\u00e9luctablement l&rsquo;extremum <strong>-Inf<\/strong>, car, d&rsquo;un point de vue axiomatique, moins l&rsquo;infini est strictement inf\u00e9rieur \u00e0 tout nombre r\u00e9el repr\u00e9sentable. En revanche, l&rsquo;ex\u00e9cution de <strong>max(valeurs)<\/strong> sera parfaitement insensible \u00e0 cette pr\u00e9sence asymptotique inf\u00e9rieure et restituera fid\u00e8lement le nombre r\u00e9el 100. Inversement, la pr\u00e9sence de <strong>Inf<\/strong> dominera de mani\u00e8re absolue l&rsquo;\u00e9valuation de <strong>max()<\/strong>.<\/p>\n<p>Pour neutraliser l&rsquo;influence parfois destructrice de ces asymptotes sur les descripteurs statistiques globaux, il est d&rsquo;usage d&rsquo;assainir le vecteur cible via la fonction de pr\u00e9dicat unaire <strong>is.finite()<\/strong>. En formulant l&rsquo;instruction :<\/p>\n<p><em>min(valeurs[is.finite(valeurs)])<\/em><\/p>\n<p>le statisticien extrait le sous-ensemble strict des r\u00e9els bien d\u00e9finis, obtenant ainsi la v\u00e9ritable borne empirique finie de son observation (soit 12 dans cet exemple pr\u00e9cis), \u00e9vitant la contamination des algorithmes d&rsquo;\u00e9talonnage par des singularit\u00e9s divisionnaires.<\/p>\n<h3>3.3 Utilisation conjointe pour le calcul de l&rsquo;\u00e9tendue statistique<\/h3>\n<p>L&rsquo;\u00e9tendue (ou intervalle de variation) constitue l&rsquo;indice de dispersion le plus intuitif associ\u00e9 \u00e0 un \u00e9chantillon continu. Elle quantifie math\u00e9matiquement la distance s\u00e9parant la valeur la plus \u00e9lev\u00e9e de la valeur la plus basse observ\u00e9e. L&rsquo;analyste peut proc\u00e9der \u00e0 cette d\u00e9termination par soustraction vectorielle directe entre les primitives :<\/p>\n<p><em>etendue &lt;- max(x) &#8211; min(x)<\/em><\/p>\n<p>Cette approche manuelle explicite se juxtapose m\u00e9thodologiquement \u00e0 la fonction int\u00e9gr\u00e9e fournie par R base intitul\u00e9e <strong>range()<\/strong>. Contrairement \u00e0 une croyance r\u00e9pandue chez les praticiens novices, <strong>range(x)<\/strong> ne calcule pas directement la diff\u00e9rence arithm\u00e9tique finale, mais renvoie un vecteur atomique de longueur 2 contenant pr\u00e9cis\u00e9ment <em>c(min(x), max(x))<\/em>. Pour obtenir l&rsquo;\u00e9tendue statistique scalaire via cette m\u00e9thode, il devient obligatoire de coupler la commande \u00e0 la fonction de d\u00e9rivation discr\u00e8te : <em>diff(range(x))<\/em>.<\/p>\n<p>La d\u00e9composition conjointe d&rsquo;un intervalle via <strong>min()<\/strong> et <strong>max()<\/strong> forme le socle op\u00e9ratoire de nombreuses proc\u00e9dures de normalisation des donn\u00e9es quantitatives. Dans les proc\u00e9dures d&rsquo;apprentissage automatique supervis\u00e9 ou de traitement du signal, la transformation unitaire couramment appel\u00e9e mise \u00e0 l&rsquo;\u00e9chelle Min-Max (Min-Max Feature Scaling) reconfigure une distribution quelconque dans un intervalle ferm\u00e9 uniforme [0, 1] en appliquant la transformation arithm\u00e9tique :<\/p>\n<p><em>x_standardise &lt;- (x &#8211; min(x)) \/ (max(x) &#8211; min(x))<\/em><\/p>\n<p>Cette formule montre comment l&rsquo;interaction conjointe de ces deux primitives assure la standardisation dimensionnelle des pr\u00e9dicteurs avant leur soumission \u00e0 des r\u00e9seaux de neurones artificiels ou des mod\u00e8les de r\u00e9gression p\u00e9nalis\u00e9e de type Ridge ou Lasso.<\/p>\n<h2>4. Gestion rigoureuse des donn\u00e9es manquantes avec l&rsquo;argument na.rm<\/h2>\n<h3>4.1 Le m\u00e9canisme de propagation par d\u00e9faut des valeurs NA<\/h3>\n<p>L&rsquo;une des singularit\u00e9s structurelles du langage R r\u00e9side dans son adh\u00e9sion stricte au paradigme de la logique ternaire de Kleene pour le traitement des donn\u00e9es non disponibles, concr\u00e9tis\u00e9 par le marqueur sp\u00e9cial <strong>NA<\/strong> (Not Available). Dans ce mod\u00e8le probabiliste et computationnel, une valeur manquante ne repr\u00e9sente ni un z\u00e9ro, ni un espace textuel vide, mais une valeur purement inconnue ou ind\u00e9termin\u00e9e. En vertu du principe \u00e9pist\u00e9mologique de contamination logique, si l&rsquo;on cherche \u00e0 d\u00e9terminer le minimum d&rsquo;une s\u00e9rie num\u00e9rique comportant une inconnue, ce minimum demeure lui-m\u00eame strictement inconnu.<\/p>\n<p>Par cons\u00e9quent, lorsque l&rsquo;analyste ex\u00e9cute la fonction sans param\u00e9trage particulier sur un vecteur affect\u00e9 par des pertes d&rsquo;observation :<\/p>\n<p><em>echantillon &lt;- c(10.5, 14.2, NA, 8.1, 19.3)<\/em><br \/><em>min(echantillon)<\/em><\/p>\n<p>la primitive retourne immanquablement <strong>NA<\/strong>. Ce r\u00e9sultat n&rsquo;est en aucun cas un bogue algorithmique, mais une d\u00e9cision de conception fondamentale destin\u00e9e \u00e0 pr\u00e9munir le chercheur contre les biais d&rsquo;agr\u00e9gation invisibles. Il convient de distinguer formellement ce marqueur <strong>NA<\/strong> du marqueur <strong>NaN<\/strong> (Not a Number), qui d\u00e9coule d&rsquo;une op\u00e9ration math\u00e9matiquement ind\u00e9termin\u00e9e (telle que 0\/0 ou log(-1)), ainsi que des cha\u00eenes de caract\u00e8res vides (\u00ab\u00a0\u00a0\u00bb), qui constituent des donn\u00e9es textuelles parfaitement d\u00e9finies du point de vue de l&rsquo;allocation m\u00e9moire mais d\u00e9nu\u00e9es de contenu s\u00e9mantique.<\/p>\n<h3>4.2 Application du param\u00e8tre na.rm = TRUE<\/h3>\n<p>Pour contourner cette r\u00e8gle de propagation conservative et \u00e9valuer les extrema statistiques sur la fraction des donn\u00e9es effectivement observ\u00e9es, le statisticien doit explicitement activer l&rsquo;argument bool\u00e9en d&rsquo;amputation : <strong>na.rm = TRUE<\/strong> (abr\u00e9viation pour <em>NA remove<\/em>) :<\/p>\n<p><em>min(echantillon, na.rm = TRUE)<\/em><\/p>\n<p>L&rsquo;adjonction de ce param\u00e8tre intime \u00e0 l&rsquo;interpr\u00e9teur R l&rsquo;ordre de proc\u00e9der \u00e0 un filtrage pr\u00e9liminaire en ignorant purement et simplement les occurrences de <strong>NA<\/strong> et de <strong>NaN<\/strong> lors de la boucle d&rsquo;\u00e9valuation d&rsquo;extrema, renvoyant dans l&rsquo;exemple susmentionn\u00e9 la valeur empirique 8.1.<\/p>\n<p>Cependant, l&rsquo;omission m\u00e9canique des donn\u00e9es manquantes ne doit jamais constituer un automatisme aveugle. Sur le plan de la validit\u00e9 inf\u00e9rentielle, exclure des observations soul\u00e8ve la question de la nature du m\u00e9canisme d&rsquo;absence gouvernant les donn\u00e9es, selon la typologie th\u00e9orique de Donald Rubin : donn\u00e9es manquantes compl\u00e8tement au hasard (MCAR), manquantes au hasard (MAR) ou manquantes de fa\u00e7on non al\u00e9atoire (MNAR). Si des participants abandonnent une \u00e9tude clinique parce que leurs scores de douleur ou de d\u00e9tresse psychologique sont insupportables, la troncature op\u00e9r\u00e9e par <strong>na.rm = TRUE<\/strong> sur la variable de tol\u00e9rance \u00e9limine pr\u00e9cis\u00e9ment les v\u00e9ritables maxima cliniques, biaisant structurellement l&rsquo;estimation finale. Il est donc indispensable d&rsquo;\u00e9valuer le ratio d&rsquo;amputation en calculant le pourcentage d&rsquo;observations \u00e9limin\u00e9es :<\/p>\n<p><em>mean(is.na(echantillon)) * 100<\/em><\/p>\n<p>avant de consid\u00e9rer la borne calcul\u00e9e comme scientifiquement valide.<\/p>\n<h3>4.3 Comportement critique face aux vecteurs totalement vides ou nuls<\/h3>\n<p>Un cas de rupture programmatique subtil survient lorsqu&rsquo;un analyste applique la fonction <strong>min()<\/strong> ou <strong>max()<\/strong> assortie du param\u00e8tre <strong>na.rm = TRUE<\/strong> \u00e0 un vecteur qui ne comporte exclusivement que des donn\u00e9es manquantes, ou \u00e0 un vecteur atomique totalement vide de dimension z\u00e9ro (comme le vecteur <em>numeric(0)<\/em>) :<\/p>\n<p><em>vecteur_vide &lt;- c(NA, NA, NA)<\/em><br \/><em>min(vecteur_vide, na.rm = TRUE)<\/em><\/p>\n<p>Dans cette situation limite, l&rsquo;interpr\u00e9teur R ne d\u00e9clenche pas d&rsquo;erreur fatale bloquante (error), mais \u00e9met un avertissement formel (warning message) libell\u00e9 comme suit : <em>no non-missing arguments to min; returning Inf<\/em>. De mani\u00e8re sym\u00e9trique, l&rsquo;\u00e9valuation de <strong>max()<\/strong> sur ce m\u00eame vecteur retournera la valeur <strong>-Inf<\/strong> assortie d&rsquo;un avertissement similaire. Ce comportement surprenant d\u00e9coule de la d\u00e9finition des \u00e9l\u00e9ments neutres pour les op\u00e9rations de borne sup\u00e9rieure et inf\u00e9rieure dans la th\u00e9orie axiomatique des treillis math\u00e9matiques : pour tout ensemble vide, le plus grand minorant th\u00e9orique est +Inf, tandis que le plus petit majorant th\u00e9orique est -Inf.<\/p>\n<p>Si ce r\u00e9sultat n&rsquo;est pas anticip\u00e9 dans un pipeline d&rsquo;analyse de donn\u00e9es automatis\u00e9, l&rsquo;introduction silencieuse de ces valeurs infinies contaminera fatalement les calculs subs\u00e9quents sans que l&rsquo;ex\u00e9cution globale du script ne soit interrompue. Pour parer \u00e0 cette anomalie, l&rsquo;analyste doit int\u00e9grer une programmation d\u00e9fensive v\u00e9rifiant pr\u00e9alablement la non-vacuit\u00e9 des donn\u00e9es observables :<\/p>\n<p><em>if (any(!is.na(vecteur_vide))) { min(vecteur_vide, na.rm = TRUE) } else { NA_real_ }<\/em><\/p>\n<p>Cette formulation pr\u00e9serve l&rsquo;int\u00e9grit\u00e9 du flux de donn\u00e9es en renvoyant explicitement un scalaire manquant typ\u00e9 en cas d&rsquo;absence int\u00e9grale de donn\u00e9es mesur\u00e9es.<\/p>\n<h2>5. Extraction des valeurs extr\u00eames \u00e0 l&rsquo;\u00e9chelle d&rsquo;un Data Frame complet<\/h2>\n<h3>5.1 \u00c9valuation globale d&rsquo;une structure tabulaire rectangulaire<\/h3>\n<p>Le tableau de donn\u00e9es rectangulaire, incarn\u00e9 par la classe fondamentale <strong>data.frame<\/strong> en R, est la structure de pr\u00e9dilection pour l&rsquo;organisation de donn\u00e9es d&rsquo;exp\u00e9rimentation plurifactorielles. Un data frame est conceptuellement une liste ordonn\u00e9e de vecteurs atomiques de m\u00eame longueur, chaque colonne repr\u00e9sentant une variable et chaque ligne une unit\u00e9 d&rsquo;observation. Lorsqu&rsquo;un analyste transmet directement un data frame entier \u00e0 la primitive <strong>min(mon_dataframe)<\/strong> ou <strong>max(mon_dataframe)<\/strong>, le moteur de R applique un aplatissement implicite de l&rsquo;ensemble de la matrice sous-jacente.<\/p>\n<p>L&rsquo;op\u00e9ration agr\u00e8ge l&rsquo;int\u00e9gralit\u00e9 des cellules de toutes les colonnes et de toutes les lignes au sein d&rsquo;un m\u00e9ga-vecteur continu temporaire, sur lequel s&rsquo;ex\u00e9cute la d\u00e9tection de l&rsquo;extremum absolu. Cette \u00e9valuation globale ne conserve aucune trace de l&rsquo;architecture ligne\/colonne de d\u00e9part. Si une telle m\u00e9thode offre un moyen ultrarapide d&rsquo;identifier le plancher ou le plafond absolu enregistr\u00e9 au sein d&rsquo;une batterie d&rsquo;\u00e9preuves psychotechniques ou d&rsquo;un r\u00e9seau de capteurs biophysiques, elle exige une condition sine qua non : l&rsquo;homog\u00e9n\u00e9it\u00e9 stricte de l&rsquo;ensemble des types de donn\u00e9es constitutifs du tableau de donn\u00e9es.<\/p>\n<h3>5.2 Risques de coercition involontaire lors de la pr\u00e9sence de variables qualitatives<\/h3>\n<p>L&rsquo;application non supervis\u00e9e de <strong>min()<\/strong> ou <strong>max()<\/strong> \u00e0 un tableau de donn\u00e9es comportant des variables de types disparates expose le statisticien \u00e0 des d\u00e9formations analytiques majeures d\u00e9coulant de la r\u00e8gle de coercition descendante de R. D\u00e8s lors qu&rsquo;une seule colonne d&rsquo;un data frame h\u00e9berge des donn\u00e9es de type textuel (<em>character<\/em>) \u2014 telles que les identifiants des sujets (\u00ab\u00a0S01\u00a0\u00bb, \u00ab\u00a0S02\u00a0\u00bb), le groupe diagnostique (\u00ab\u00a0Contr\u00f4le\u00a0\u00bb, \u00ab\u00a0Pathologie\u00a0\u00bb) ou le sexe (\u00ab\u00a0F\u00a0\u00bb, \u00ab\u00a0M\u00a0\u00bb) \u2014, la transmission globale du tableau force l&rsquo;interpr\u00e9teur \u00e0 convertir silencieusement l&rsquo;int\u00e9gralit\u00e9 des cellules num\u00e9riques en cha\u00eenes textuelles :<\/p>\n<p>Si la variable num\u00e9rique d&rsquo;\u00e2ge contient les valeurs 9, 25 et 80, et que le tableau contient une variable textuelle de groupe, les \u00e2ges sont imm\u00e9diatement convertis en \u00ab\u00a09\u00a0\u00bb, \u00ab\u00a025\u00a0\u00bb et \u00ab\u00a080\u00a0\u00bb. Lors de l&rsquo;\u00e9valuation de <strong>max()<\/strong> sur ce tableau polymorphe, la comparaison lexicographique d\u00e9terminera que la cha\u00eene \u00ab\u00a09\u00a0\u00bb est strictement sup\u00e9rieure \u00e0 \u00ab\u00a080\u00a0\u00bb et \u00ab\u00a025\u00a0\u00bb, car le glyphe \u00ab\u00a09\u00a0\u00bb pr\u00e9sente un code ASCII plus \u00e9lev\u00e9 que le glyphe \u00ab\u00a08\u00a0\u00bb ou \u00ab\u00a02\u00a0\u00bb. L&rsquo;extremum retourn\u00e9 sera donc une aberration num\u00e9rique totale g\u00e9n\u00e9r\u00e9e sans le moindre message d&rsquo;erreur d&rsquo;alerte.<\/p>\n<p>Pour pr\u00e9venir ces \u00e9cueils critiques, il est imp\u00e9ratif d&rsquo;isoler en amont les colonnes purement quantitatives avant tout calcul en faisant usage des s\u00e9lecteurs de type :<\/p>\n<p><em>colonnes_num &lt;- sapply(mon_dataframe, is.numeric)<\/em><br \/><em>max(mon_dataframe[, colonnes_num], na.rm = TRUE)<\/em><\/p>\n<h3>5.3 S\u00e9lection cibl\u00e9e par indexation indicielle ou par nom<\/h3>\n<p>Plut\u00f4t que de risquer une \u00e9valuation aveugle sur l&rsquo;ensemble d&rsquo;un tableau rectangulaire, la m\u00e9thode analytique recommand\u00e9e pr\u00e9conise la restriction du champ d&rsquo;\u00e9valuation par s\u00e9lection indicielle ou nominale explicite. R propose une syntaxe matricielle standardis\u00e9e bas\u00e9e sur l&rsquo;op\u00e9rateur crochet simple <strong>[lignes, colonnes]<\/strong>. Si un investigateur s&rsquo;int\u00e9resse exclusivement aux extrema observ\u00e9s sur un sous-ensemble d&rsquo;\u00e9preuves cognitives intitul\u00e9es \u00ab\u00a0Test_A\u00a0\u00bb, \u00ab\u00a0Test_B\u00a0\u00bb et \u00ab\u00a0Test_C\u00a0\u00bb, la syntaxe s\u00e9curis\u00e9e s&rsquo;articule ainsi :<\/p>\n<p><em>variables_cibles &lt;- c(\u00ab\u00a0Test_A\u00a0\u00bb, \u00ab\u00a0Test_B\u00a0\u00bb, \u00ab\u00a0Test_C\u00a0\u00bb)<\/em><br \/><em>min_global &lt;- min(mon_dataframe[, variables_cibles], na.rm = TRUE)<\/em><\/p>\n<p>Cette approche permet d&rsquo;encapsuler pr\u00e9cis\u00e9ment le domaine de calcul tout en contr\u00f4lant rigoureusement l&rsquo;impact des donn\u00e9es manquantes au sein de la sous-matrice s\u00e9lectionn\u00e9e. L&rsquo;utilisation des crochets doubles <strong>[[nom_colonne]]<\/strong> ou de l&rsquo;op\u00e9rateur d&rsquo;extraction <strong>$<\/strong> reste r\u00e9serv\u00e9e \u00e0 l&rsquo;\u00e9valuation univari\u00e9e d&rsquo;une colonne isol\u00e9e consid\u00e9r\u00e9e comme un vecteur unidimensionnel autonome (ex : <em>min(mon_dataframe$Test_A, na.rm = TRUE)<\/em>), \u00e9vitant la surcharge computationnelle induite par le parsing d&rsquo;une sous-structure de tableau complexe.<\/p>\n<h2>6. Calcul it\u00e9ratif des minima et maxima par ligne ou par colonne<\/h2>\n<h3>6.1 Exploitation de la fonction apply() pour l&rsquo;analyse dimensionnelle<\/h3>\n<p>Lorsqu&rsquo;un chercheur souhaite non pas extraire un unique extremum global, mais analyser la variabilit\u00e9 transversale de son jeu de donn\u00e9es en calculant le minimum ou le maximum pour chaque variable (colonne) ou pour chaque observation individuelle (ligne), l&rsquo;outil de r\u00e9f\u00e9rence au sein de R base est la fonction d&rsquo;ordre sup\u00e9rieur <strong>apply()<\/strong>. Cette primitive permet d&rsquo;it\u00e9rer une fonction statistique selon l&rsquo;un des axes de la matrice de donn\u00e9es sans requ\u00e9rir l&rsquo;\u00e9criture d&rsquo;une boucle explicite de type for.<\/p>\n<p>Pour calculer les extrema associ\u00e9s \u00e0 chaque colonne d&rsquo;un bloc de mesures num\u00e9riques, l&rsquo;indice de dimension MARGIN doit \u00eatre configur\u00e9 \u00e0 2 (repr\u00e9sentant l&rsquo;axe des colonnes) :<\/p>\n<p><em>minima_colonnes &lt;- apply(mes_donnees_num, 2, min, na.rm = TRUE)<\/em><\/p>\n<p>Cette instruction renvoie un vecteur nomm\u00e9 dont chaque \u00e9l\u00e9ment correspond \u00e0 la borne inf\u00e9rieure de la variable respective. Inversement, pour \u00e9valuer les profils de performance individuels \u2014 par exemple d\u00e9terminer le score le plus faible enregistr\u00e9 par chaque participant au cours de plusieurs essais successifs \u2014, la marge d&rsquo;it\u00e9ration doit \u00eatre bascul\u00e9e sur la dimension 1 (repr\u00e9sentant l&rsquo;axe des lignes) :<\/p>\n<p><em>minima_individus &lt;- apply(mes_donnees_num, 1, min, na.rm = TRUE)<\/em><\/p>\n<p>La sortie est alors un vecteur num\u00e9rique dont la longueur est rigoureusement identique au nombre de lignes du jeu de donn\u00e9es originel, respectant la coh\u00e9rence structurelle du protocole.<\/p>\n<h3>6.2 Utilisation de sapply() et lapply() pour des structures h\u00e9t\u00e9rog\u00e8nes<\/h3>\n<p>La fonction <em>apply()<\/em> poss\u00e8de une contrainte majeure : elle convertit pr\u00e9alablement l&rsquo;objet d&rsquo;entr\u00e9e en une matrice homog\u00e8ne. Si le data frame h\u00e9berge des types complexes ou si l&rsquo;on manipule une liste h\u00e9t\u00e9rog\u00e8ne de structures de donn\u00e9es variables, l&rsquo;usage des fonctions de la famille <strong>lapply()<\/strong> et <strong>sapply()<\/strong> s&rsquo;impose naturellement. Ces fonctions traitent structurellement le tableau de donn\u00e9es comme une collection de vecteurs ind\u00e9pendants.<\/p>\n<p>Pour extraire la borne maximale de chaque colonne tout en for\u00e7ant la simplification de la r\u00e9ponse sous la forme d&rsquo;un vecteur atomique propre, la syntaxe <strong>sapply()<\/strong> est privil\u00e9gi\u00e9e :<\/p>\n<p><em>maxima_variables &lt;- sapply(mon_dataframe, function(colonne) {<\/em><br \/><em>&nbsp;&nbsp;if (is.numeric(colonne)) max(colonne, na.rm = TRUE) else NA<\/em><br \/><em>})<\/em><\/p>\n<p>Cette structure algorithmique bas\u00e9e sur une fonction anonyme offre une adaptabilit\u00e9 totale : elle filtre conditionnellement les colonnes selon leur nature intrins\u00e8que, applique la fonction d&rsquo;extremum exclusivement aux composantes arithm\u00e9tiques, et assigne un marqueur neutre <em>NA<\/em> aux variables factorielles ou qualitatives sans d\u00e9clencher d&rsquo;anomalie de coercition textuelle. Si l&rsquo;analyste requiert une structure de sortie extensible conservant le typage d&rsquo;arborescence, <strong>lapply()<\/strong> fournira une liste de scalaires id\u00e9ale pour des pipelines d&rsquo;automatisation logicielle avanc\u00e9s.<\/p>\n<h3>6.3 Optimisation vectoris\u00e9e avec les fonctions sp\u00e9cialis\u00e9es de matrixStats<\/h3>\n<p>Bien que la famille des fonctions <em>apply()<\/em> fasse partie int\u00e9grante du c\u0153ur de R, elle s&rsquo;av\u00e8re computationnellement inefficiente lors du traitement de matrices massives issues par exemple du s\u00e9quen\u00e7age g\u00e9nomique, de l&rsquo;enregistrement \u00e9lectroenc\u00e9phalographique (EEG) \u00e0 haute densit\u00e9 ou des bases de donn\u00e9es de neuro-imagerie fonctionnelle. Sous le capot, <em>apply()<\/em> instancie une boucle s\u00e9quentielle non compil\u00e9e dans l&rsquo;interpr\u00e9teur qui g\u00e9n\u00e8re des allocations de m\u00e9moire transitoires r\u00e9p\u00e9t\u00e9es.<\/p>\n<p>Pour surmonter ce goulot d&rsquo;\u00e9tranglement de performance, l&rsquo;\u00e9cosyst\u00e8me scientifique R s&rsquo;appuie sur le paquetage ultra-performant <strong>matrixStats<\/strong>. D\u00e9velopp\u00e9 par Henrik Bengtsson, ce module impl\u00e9mente des extensions enti\u00e8rement compil\u00e9es en langage C, optimis\u00e9es au niveau des registres processeur pour \u00e9valuer les calculs d&rsquo;extrema matriciels sans passer par l&rsquo;interpr\u00e9teur R :<\/p>\n<p><em>library(matrixStats)<\/em><br \/><em>mat &lt;- as.matrix(grand_dataframe_numerique)<\/em><br \/><em>minima_lignes &lt;- rowMins(mat, na.rm = TRUE)<\/em><br \/><em>maxima_colonnes &lt;- colMaxs(mat, na.rm = TRUE)<\/em><\/p>\n<p>Les gains de vitesse mesur\u00e9s atteignent fr\u00e9quemment un \u00e0 deux ordres de grandeur (facteur d&rsquo;acc\u00e9l\u00e9ration de 10x \u00e0 100x) comparativement \u00e0 un appel <em>apply()<\/em> traditionnel. Cette optimisation se r\u00e9v\u00e8le d\u00e9cisive lorsque les matrices exp\u00e9rimentales comptent des centaines de milliers d&rsquo;enregistrements temporels et qu&rsquo;une latence d&rsquo;analyse minimale est requise.<\/p>\n<h2>7. Int\u00e9gration avanc\u00e9e dans le flux de travail Tidyverse<\/h2>\n<h3>7.1 Agr\u00e9gation descriptive avec summarise() et group_by()<\/h3>\n<p>Le paradigme d&rsquo;ing\u00e9nierie de donn\u00e9es formalis\u00e9 par Hadley Wickham au travers du <a rel=\"noopener noreferrer\" href=\"https:\/\/www.tidyverse.org\/\">Tidyverse<\/a> et de la biblioth\u00e8que centrale <strong>dplyr<\/strong> propose une grammaire d\u00e9clarative particuli\u00e8rement \u00e9l\u00e9gante pour l&rsquo;agr\u00e9gation de sous-populations exp\u00e9rimentales. L&rsquo;\u00e9valuation conjointe de <strong>min()<\/strong> et <strong>max()<\/strong> trouve son application naturelle au sein du bin\u00f4me <strong>group_by()<\/strong> et <strong>summarise()<\/strong>, permettant d&rsquo;extraire des profils d&rsquo;extrema stratifi\u00e9s par modalit\u00e9 exp\u00e9rimentale :<\/p>\n<p><em>library(dplyr)<\/em><br \/><em>tableau_recap &lt;- donnees_cognitives %&gt;%<\/em><br \/><em>&nbsp;&nbsp;group_by(Groupe_Clinique, Sexe) %&gt;%<\/em><br \/><em>&nbsp;&nbsp;summarise(<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;TR_Min = min(Temps_Reaction, na.rm = TRUE),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;TR_Max = max(Temps_Reaction, na.rm = TRUE),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;N_Total = n(),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;.groups = \u00ab\u00a0drop\u00a0\u00bb<\/em><br \/><em>&nbsp;&nbsp;)<\/em><\/p>\n<p>Dans ce segment de code, l&rsquo;op\u00e9rateur de composition s\u00e9quentielle (pipe, %&gt;% ou |&gt;) segmente le flux d&rsquo;ex\u00e9cution. Les observations sont fractionn\u00e9es par cohorte clinique puis projet\u00e9es dans un espace r\u00e9capitulatif compact. Chaque groupe exp\u00e9rimental se voit attribuer ses bornes locales sp\u00e9cifiques avec un nommage de variable explicite et auto-document\u00e9, imm\u00e9diatement mobilisable pour l&rsquo;\u00e9dition de tables descriptives publiables conformes aux exigences \u00e9ditoriales des revues acad\u00e9miques internationales.<\/p>\n<h3>7.2 Transformation et centrage-r\u00e9duction des donn\u00e9es avec mutate()<\/h3>\n<p>Au-del\u00e0 de la synth\u00e8se descriptive globale qui r\u00e9duit le nombre de lignes du jeu de donn\u00e9es initial, les fonctions d&rsquo;extrema s&rsquo;int\u00e8grent au verbe de manipulation <strong>mutate()<\/strong> pour op\u00e9rer des transformations structurelles tout en conservant la granularit\u00e9 individuelle de chaque ligne. Cette d\u00e9marche est omnipr\u00e9sente lorsqu&rsquo;un investigateur cherche \u00e0 situer une mesure individuelle par rapport aux limites dynamiques de son propre groupe d&rsquo;appartenance.<\/p>\n<p>\u00c0 titre d&rsquo;illustration, consid\u00e9rons la standardisation de scores de performance relative, o\u00f9 l&rsquo;on souhaite calculer la distance s\u00e9parant chaque observation du minimum de sa sous-population d&rsquo;\u00e2ge :<\/p>\n<p><em>donnees_transformees &lt;- donnees_cognitives %&gt;%<\/em><br \/><em>&nbsp;&nbsp;group_by(Tranche_Age) %&gt;%<\/em><br \/><em>&nbsp;&nbsp;mutate(<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Ecart_Au_Min = Score_Memoire &#8211; min(Score_Memoire, na.rm = TRUE),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Score_Relatif = (Score_Memoire &#8211; min(Score_Memoire, na.rm = TRUE)) \/ (max(Score_Memoire, na.rm = TRUE) &#8211; min(Score_Memoire, na.rm = TRUE))<\/em><br \/><em>&nbsp;&nbsp;) %&gt;%<\/em><br \/><em>&nbsp;&nbsp;ungroup()<\/em><\/p>\n<p>L&rsquo;avantage technique de cette approche r\u00e9side dans la pr\u00e9servation stricte de la dimension matricielle originelle. L&rsquo;interpr\u00e9teur R proc\u00e8de \u00e0 une expansion vectorielle (recyclage contextuel) : pour chaque sous-groupe, le minimum et le maximum sont \u00e9valu\u00e9s localement sous forme de scalaires puis soustraits ou divis\u00e9s \u00e9l\u00e9ment par \u00e9l\u00e9ment sur l&rsquo;ensemble des observations du segment consid\u00e9r\u00e9, garantissant une mise \u00e0 l&rsquo;\u00e9chelle personnalis\u00e9e d&rsquo;une pr\u00e9cision math\u00e9matique absolue.<\/p>\n<h3>7.3 Filtrage conditionnel des observations atypiques avec filter()<\/h3>\n<p>L&rsquo;identification et l&rsquo;extraction des cas empiriques extr\u00eames constituent une phase critique du contr\u00f4le de qualit\u00e9 en recherche exp\u00e9rimentale. Gr\u00e2ce au verbe d\u00e9claratif <strong>filter()<\/strong> de dplyr, l&rsquo;analyste peut requ\u00eater directement les lignes atteignant le minimum ou le maximum absolu d&rsquo;une distribution sans recourir \u00e0 des manipulations indicielles complexes :<\/p>\n<p><em>sujets_limites &lt;- donnees_cognitives %&gt;%<\/em><br \/><em>&nbsp;&nbsp;filter(Score_Anxiete == min(Score_Anxiete, na.rm = TRUE) | Score_Anxiete == max(Score_Anxiete, na.rm = TRUE))<\/em><\/p>\n<p>Ce filtre logique extrait instantan\u00e9ment l&rsquo;ensemble des participants ayant obtenu les notes les plus basses ou les plus hautes enregistr\u00e9es sur l&rsquo;\u00e9chelle psychom\u00e9trique consid\u00e9r\u00e9e. Une telle instruction se r\u00e9v\u00e8le particuli\u00e8rement pr\u00e9cieuse pour isoler les individus pr\u00e9sentant des profils de saturation d&rsquo;\u00e9chelle (effets plancher ou plafond), autorisant une inspection approfondie de leurs m\u00e9tadonn\u00e9es cliniques pour v\u00e9rifier l&rsquo;absence d&rsquo;erreurs de passation ou, au contraire, pour caract\u00e9riser une symptomatologie clinique d&rsquo;une s\u00e9v\u00e9rit\u00e9 exceptionnelle.<\/p>\n<h2>8. Variantes fonctionnelles et calculs parall\u00e8les : pmin(), pmax(), cummin() et cummax()<\/h2>\n<h3>8.1 Distinction conceptuelle entre min() et la version vectoris\u00e9e pmin()<\/h3>\n<p>L&rsquo;une des confusions les plus r\u00e9currentes dans l&rsquo;apprentissage de R r\u00e9side dans l&rsquo;assimilation erron\u00e9e de la primitive d&rsquo;agr\u00e9gation <strong>min()<\/strong> avec sa contrepartie vectoris\u00e9e parall\u00e8le <strong>pmin()<\/strong> (Parallel Minimum). Alors que <em>min()<\/em> regroupe tous les arguments fournis en une seule entit\u00e9 scalatoire, <em>pmin()<\/em> et <em>pmax()<\/em> prennent en entr\u00e9e plusieurs vecteurs de dimensions \u00e9quivalentes et op\u00e8rent une comparaison \u00e9l\u00e9ment par \u00e9l\u00e9ment (composante par composante), renvoyant un nouveau vecteur dont la longueur est \u00e9gale \u00e0 celle des entr\u00e9es :<\/p>\n<p><em>v1 &lt;- c(10, 2, 30)<\/em><br \/><em>v2 &lt;- c(4, 15, 20)<\/em><br \/><em>min(v1, v2)<\/em> renvoie 2 (le scalaire absolu le plus faible).<br \/><em>pmin(v1, v2)<\/em> renvoie le vecteur c(4, 2, 20).<\/p>\n<p>Si les vecteurs compar\u00e9s pr\u00e9sentent des longueurs in\u00e9gales, R applique la r\u00e8gle universelle du <em>recyclage vectoriel<\/em> : les \u00e9l\u00e9ments du vecteur le plus court sont r\u00e9it\u00e9r\u00e9s s\u00e9quentiellement pour atteindre la taille du vecteur le plus long. Un cas d&rsquo;usage typique dans les sciences comportementales concerne la d\u00e9termination du score plancher sur deux tests cognitifs parall\u00e8les administr\u00e9s conjointement : <em>score_conservateur &lt;- pmin(test_forme_A, test_forme_B, na.rm = TRUE)<\/em>.<\/p>\n<h3>8.2 \u00c9cr\u00eatage et seuillage de donn\u00e9es (Winsorisation empirique)<\/h3>\n<p>Une application technique extr\u00eamement puissante des primitives <strong>pmin()<\/strong> et <strong>pmax()<\/strong> r\u00e9side dans l&rsquo;op\u00e9ration de seuillage num\u00e9rique, plus connue en statistique robuste sous le terme de <a rel=\"noopener noreferrer\" href=\"https:\/\/www.jstor.org\/stable\/2282240\">Winsorisation<\/a>. Lorsqu&rsquo;une distribution comporte des valeurs extr\u00eames plausibles mais excessivement d\u00e9viantes qui risquent de fausser l&rsquo;estimation de la moyenne et des covariances, l&rsquo;analyste peut d\u00e9cider de plafonner ou plancher artificiellement les donn\u00e9es \u00e0 des bornes pr\u00e9d\u00e9termin\u00e9es sans \u00e9liminer les participants de l&rsquo;\u00e9chantillon :<\/p>\n<p><em>seuil_inferieur &lt;- 200<\/em><br \/><em>seuil_superieur &lt;- 1000<\/em><br \/><em>temps_reaction_winsorises &lt;- pmin(pmax(temps_reaction_bruts, seuil_inferieur), seuil_superieur)<\/em><\/p>\n<p>Dans cette formulation imbriqu\u00e9e, <em>pmax(temps_reaction_bruts, seuil_inferieur)<\/em> compare chaque temps de r\u00e9action au seuil de 200 millisecondes et substitue 200 \u00e0 toute valeur qui lui serait inf\u00e9rieure. Imm\u00e9diatement apr\u00e8s, l&rsquo;appel englobant <em>pmin(&#8230;, seuil_superieur)<\/em> compare les valeurs r\u00e9sultantes au plafond de 1000 millisecondes et tronque tout d\u00e9passement \u00e0 1000. L&rsquo;\u00e9chantillon conserve ainsi son effectif total <em>N<\/em>, mais sa variance est r\u00e9gularis\u00e9e et l&rsquo;impact des artefacts de saisie est m\u00e9caniquement jugul\u00e9.<\/p>\n<h3>8.3 \u00c9valuation des s\u00e9ries dynamiques avec cummin() et cummax()<\/h3>\n<p>Dans les protocoles longitudinaux, les \u00e9tudes de suivi temporel ou l&rsquo;analyse des processus d&rsquo;apprentissage s\u00e9quentiel, la trajectoire temporelle de la performance rev\u00eat une importance capitale. Le socle de R propose pour ce domaine les primitives d&rsquo;extrema cumulatifs <strong>cummin()<\/strong> et <strong>cummax()<\/strong>. Ces fonctions prennent un vecteur en entr\u00e9e et renvoient un vecteur de m\u00eame dimension o\u00f9 chaque \u00e9l\u00e9ment \u00e0 la position <em>i<\/em> repr\u00e9sente le minimum ou le maximum observ\u00e9 depuis la premi\u00e8re observation jusqu&rsquo;\u00e0 l&rsquo;observation <em>i<\/em> comprise :<\/p>\n<p><em>essais_latence &lt;- c(550, 480, 510, 420, 430, 390)<\/em><br \/><em>meilleure_performance &lt;- cummin(essais_latence)<\/em><br \/>Le vecteur r\u00e9sultant sera : c(550, 480, 480, 420, 420, 390).<\/p>\n<p>Cette transformation mod\u00e9lise fid\u00e8lement les courbes d&rsquo;acquisition cognitive : l&rsquo;\u00e9volution du palier minimal traduit la vitesse d&rsquo;automatisation motrice d&rsquo;un individu au fil de l&rsquo;exposition au stimulus. Toutefois, il convient d&rsquo;observer une pr\u00e9caution rigoureuse vis-\u00e0-vis des donn\u00e9es manquantes. Contrairement \u00e0 <em>min()<\/em> qui dispose du param\u00e8tre <em>na.rm<\/em>, les fonctions cumulatives comme <strong>cummin()<\/strong> ne poss\u00e8dent pas d&rsquo;argument <em>na.rm<\/em>. D\u00e8s qu&rsquo;un marqueur <em>NA<\/em> est rencontr\u00e9 dans la s\u00e9rie temporelle, l&rsquo;ensemble des \u00e9l\u00e9ments ult\u00e9rieurs du vecteur cumul\u00e9 est irr\u00e9m\u00e9diablement contamin\u00e9 et transform\u00e9 en <em>NA<\/em>, n\u00e9cessitant une imputation ou un filtrage pr\u00e9alable du signal.<\/p>\n<h2>9. Localisation spatiale des extr\u00eames : which.min() et which.max()<\/h2>\n<h3>9.1 Identification de l&rsquo;index plut\u00f4t que de la valeur brute<\/h3>\n<p>Dans une multiplicit\u00e9 de sc\u00e9narios d&rsquo;analyse de donn\u00e9es, conna\u00eetre la valeur absolue d&rsquo;un minimum ou d&rsquo;un maximum s&rsquo;av\u00e8re insuffisant ; la question fondamentale pos\u00e9e par le chercheur est de savoir <em>qui<\/em> ou <em>quelle unit\u00e9 exp\u00e9rimentale<\/em> a produit cet extremum. C&rsquo;est pr\u00e9cis\u00e9ment la fonction d\u00e9volue aux primitives d&rsquo;indexation spatiale <strong>which.min()<\/strong> et <strong>which.max()<\/strong>. Plut\u00f4t que de renvoyer le score num\u00e9rique brut, ces fonctions renvoient l&rsquo;index indiciel (la position enti\u00e8re) du premier extremum rencontr\u00e9 au sein du vecteur :<\/p>\n<p><em>latences &lt;- c(340, 512, 198, 421)<\/em><br \/><em>index_plus_rapide &lt;- which.min(latences)<\/em> renvoie l&rsquo;entier 3.<\/p>\n<p>Sur le plan algorithmique, l&#8217;emploi de <strong>which.min(x)<\/strong> pr\u00e9sente un avantage substantiel en termes de performance et de compacit\u00e9 syntaxique par rapport \u00e0 une formulation logique na\u00efve de type : <em>which(x == min(x, na.rm = TRUE))[1]<\/em>. Cette derni\u00e8re impose en effet \u00e0 la machine deux passes it\u00e9ratives compl\u00e8tes sur le vecteur (l&rsquo;une pour trouver le minimum, l&rsquo;autre pour \u00e9valuer l&rsquo;\u00e9galit\u00e9 bool\u00e9enne) ainsi que l&rsquo;allocation m\u00e9moire d&rsquo;un vecteur logique interm\u00e9diaire de m\u00eame dimension que <em>x<\/em>. De surcro\u00eet, <strong>which.min()<\/strong> ignore nativement les valeurs <em>NA<\/em> sans n\u00e9cessiter d&rsquo;argument compl\u00e9mentaire, contournant \u00e9l\u00e9gamment le risque d&rsquo;interruption.<\/p>\n<h3>9.2 Gestion des ex \u00e6quo et unicit\u00e9 de l&rsquo;indice renvoy\u00e9<\/h3>\n<p>Une caract\u00e9ristique d\u00e9terminante de la signature algorithmique de <strong>which.min()<\/strong> et <strong>which.max()<\/strong> r\u00e9side dans leur r\u00e8gle stricte de s\u00e9lection face aux \u00e9galit\u00e9s parfaites (ex \u00e6quo). En pr\u00e9sence de plusieurs occurrences rigoureusement identiques de la valeur minimale ou maximale, ces fonctions garantissent le retour exclusif de la position de la <em>toute premi\u00e8re occurrence<\/em> rencontr\u00e9e lors du balayage m\u00e9moire indiciel s\u00e9quentiel de gauche \u00e0 droite :<\/p>\n<p><em>scores_egalite &lt;- c(10, 5, 20, 5, 18)<\/em><br \/><em>which.min(scores_egalite)<\/em> renvoie uniquement la position 2, ignorant la position 4 qui pr\u00e9sente pourtant le m\u00eame niveau d&rsquo;extremum.<\/p>\n<p>Si la probl\u00e9matique scientifique de l&rsquo;analyste exige l&rsquo;identification int\u00e9grale de l&rsquo;ensemble des unit\u00e9s exp\u00e9rimentales partageant la borne extr\u00eame \u2014 par exemple pour identifier tous les participants ayant r\u00e9alis\u00e9 un sans-faute sur une t\u00e2che cognitive \u2014, il est imp\u00e9ratif d&rsquo;abandonner <em>which.min()<\/em> au profit d&rsquo;une combinaison explicite d&rsquo;op\u00e9rateurs de comparaison vectorielle :<\/p>\n<p><em>tous_les_minima &lt;- which(scores_egalite == min(scores_egalite, na.rm = TRUE))<\/em><\/p>\n<p>Dans ce contexte, R renvoie le vecteur d&rsquo;indices complet <em>c(2, 4)<\/em>, permettant une affectation rigoureuse des rangs ou une analyse ult\u00e9rieure de la multiplicit\u00e9 des ex \u00e6quo.<\/p>\n<h3>9.3 Extraction de lignes enti\u00e8res dans un jeu de donn\u00e9es<\/h3>\n<p>L&rsquo;utilit\u00e9 pratique majeure de l&rsquo;index spatial fourni par <strong>which.min()<\/strong> et <strong>which.max()<\/strong> s&rsquo;exprime dans l&rsquo;indexation directe des structures de type data frame. En injectant l&rsquo;entier retourn\u00e9 au niveau de la dimension ligne de l&rsquo;op\u00e9rateur crochet <strong>[ligne, colonne]<\/strong>, le statisticien extrait d&rsquo;un seul bloc le profil descriptif exhaustif du sujet ayant g\u00e9n\u00e9r\u00e9 l&rsquo;observation limite :<\/p>\n<p><em>sujet_critique &lt;- mon_dataframe[which.max(mon_dataframe$Temps_Reaction), ]<\/em><\/p>\n<p>Cette ligne de commande renvoie un data frame d&rsquo;une seule ligne conservant l&rsquo;ensemble des colonnes contextuelles (identifiant, statut g\u00e9n\u00e9tique, \u00e2ge, sexe, traitements m\u00e9dicamenteux associ\u00e9s), fournissant un moyen d&rsquo;investigation qualitatif imm\u00e9diat du participant le plus lent de l&rsquo;\u00e9tude.<\/p>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me Tidyverse, cette manipulation trouve son pendant fonctionnel au travers des fonctions sp\u00e9cialis\u00e9es <strong>slice_min()<\/strong> et <strong>slice_max()<\/strong> de dplyr. Ces verbes apportent une abstraction de plus haut niveau, int\u00e9grant par d\u00e9faut la gestion sophistiqu\u00e9e des ex \u00e6quo (argument <em>with_ties<\/em>) et permettant un fractionnement direct par groupe d&rsquo;\u00e9chantillonnage :<\/p>\n<p><em>meilleurs_sujets &lt;- mon_dataframe %&gt;%<\/em><br \/><em>&nbsp;&nbsp;group_by(Groupe_Clinique) %&gt;%<\/em><br \/><em>&nbsp;&nbsp;slice_min(order_by = Temps_Reaction, n = 1, with_ties = FALSE)<\/em><\/p>\n<h2>10. Comportement des fonctions sur les donn\u00e9es non num\u00e9riques<\/h2>\n<h3>10.1 \u00c9valuation lexicographique sur les vecteurs de type caract\u00e8re<\/h3>\n<p>Bien que <strong>min()<\/strong> et <strong>max()<\/strong> soient intuitivement associ\u00e9es \u00e0 l&rsquo;arithm\u00e9tique quantitative, leur impl\u00e9mentation en R autorise l&rsquo;\u00e9valuation de vecteurs de cha\u00eenes de caract\u00e8res (type <em>character<\/em>). Lorsque de telles donn\u00e9es sont soumises \u00e0 la fonction, l&rsquo;interpr\u00e9teur applique un algorithme de tri bas\u00e9 sur l&rsquo;ordre lexicographique standard d\u00e9fini par la table de caract\u00e8res machine en vigueur :<\/p>\n<p><em>mots &lt;- c(\u00ab\u00a0Barycentre\u00a0\u00bb, \u00ab\u00a0Algorithme\u00a0\u00bb, \u00ab\u00a0Zygomatique\u00a0\u00bb, \u00ab\u00a0Cognition\u00a0\u00bb)<\/em><br \/><em>min(mots)<\/em> renvoie \u00ab\u00a0Algorithme\u00a0\u00bb.<br \/><em>max(mots)<\/em> renvoie \u00ab\u00a0Zygomatique\u00a0\u00bb.<\/p>\n<p>Il importe toutefois de souligner que cet ordre lexicographique d\u00e9pend \u00e9troitement de la configuration r\u00e9gionale du syst\u00e8me h\u00f4te (les <em>locales<\/em> du syst\u00e8me d&rsquo;exploitation, r\u00e9gies par les variables d&rsquo;environnement LC_COLLATE). Sur certains syst\u00e8mes, le classement entre majuscules, minuscules et caract\u00e8res pourvus de diacritiques (accents, c\u00e9dilles) peut varier, compromettant la reproductibilit\u00e9 des tris alphab\u00e9tiques stricts lors de l&rsquo;ex\u00e9cution du code sur des serveurs distribu\u00e9s h\u00e9t\u00e9rog\u00e8nes.<\/p>\n<p>Le pi\u00e8ge m\u00e9thodologique le plus d\u00e9vastateur r\u00e9side dans l&rsquo;utilisation involontaire de ces fonctions sur des nombres erron\u00e9ment import\u00e9s sous forme textuelle depuis un fichier CSV mal format\u00e9. Un vecteur textuel <em>c(\u00ab\u00a0100\u00a0\u00bb, \u00ab\u00a02\u00a0\u00bb, \u00ab\u00a030\u00a0\u00bb)<\/em> soumis \u00e0 <em>max()<\/em> renverra \u00ab\u00a030\u00a0\u00bb et non \u00ab\u00a0100\u00a0\u00bb, car le premier glyphe \u00ab\u00a03\u00a0\u00bb l&#8217;emporte sur \u00ab\u00a01\u00a0\u00bb. L&rsquo;analyste doit imp\u00e9rativement auditer la nature de ses colonnes via <em>str()<\/em> avant de valider ses bornes statistiques.<\/p>\n<h3>10.2 Calcul d&rsquo;extrema sur des dates et horodatages temporels<\/h3>\n<p>Le langage R int\u00e8gre des classes natives de haute pr\u00e9cision pour la gestion temporelle, notamment la classe <strong>Date<\/strong> (pour la datation calendaire) et les classes <strong>POSIXct \/ POSIXlt<\/strong> (pour les horodatages continus int\u00e9grant les fuseaux horaires et les secondes fractionnaires). Les fonctions <strong>min()<\/strong> et <strong>max()<\/strong> poss\u00e8dent une compatibilit\u00e9 int\u00e9grale et transparente avec ces types de donn\u00e9es temporelles :<\/p>\n<p><em>dates_visite &lt;- as.Date(c(\u00ab\u00a02023-01-15\u00a0\u00bb, \u00ab\u00a02022-11-20\u00a0\u00bb, \u00ab\u00a02023-05-10\u00a0\u00bb))<\/em><br \/><em>premiere_session &lt;- min(dates_visite)<\/em> renvoie \u00ab\u00a02022-11-20\u00a0\u00bb.<br \/><em>derniere_session &lt;- max(dates_visite)<\/em> renvoie \u00ab\u00a02023-05-10\u00a0\u00bb.<\/p>\n<p>Dans ce cadre op\u00e9rationnel, le minimum repr\u00e9sente l&rsquo;\u00e9v\u00e9nement le plus ancien dans le temps, tandis que le maximum traduit l&rsquo;\u00e9v\u00e9nement le plus r\u00e9cent. La soustraction directe des deux extrema temporels :<\/p>\n<p><em>duree_etude &lt;- max(dates_visite) &#8211; min(dates_visite)<\/em><\/p>\n<p>renvoie automatiquement un objet de classe <strong>difftime<\/strong> quantifiant rigoureusement la dur\u00e9e globale de collecte du protocole exp\u00e9rimental (ex : <em>Time difference of 171 days<\/em>). Cette fonctionnalit\u00e9 assure une fluidit\u00e9 exemplaire lors du nettoyage des \u00e9tudes de suivi \u00e9pid\u00e9miologique et de l&rsquo;audit de respect des fen\u00eatres d&rsquo;inclusion clinique.<\/p>\n<h3>10.3 Traitement des facteurs ordonn\u00e9s versus facteurs non ordonn\u00e9s<\/h3>\n<p>Les variables qualitatives cat\u00e9gorielles sont classiquement encod\u00e9es en R sous la forme de <strong>facteurs<\/strong> (objets de classe <em>factor<\/em>), qui associent un vecteur d&rsquo;entiers sous-jacents \u00e0 un ensemble de libell\u00e9s textuels (les <em>levels<\/em>). Face \u00e0 un facteur standard non ordonn\u00e9, l&rsquo;invocation de <strong>min()<\/strong> ou <strong>max()<\/strong> d\u00e9clenche une interruption d&rsquo;ex\u00e9cution imm\u00e9diate assortie d&rsquo;une erreur formelle :<\/p>\n<p><em>statut &lt;- factor(c(\u00ab\u00a0Placebo\u00a0\u00bb, \u00ab\u00a0Traitement_A\u00a0\u00bb, \u00ab\u00a0Traitement_B\u00a0\u00bb))<\/em><br \/><em>min(statut)<\/em> g\u00e9n\u00e8re : <em>Error in Summary.factor(&#8230;, na.rm = na.rm) : \u2018min\u2019 not meaningful for factors<\/em>.<\/p>\n<p>Cette restriction algorithmique est parfaitement coh\u00e9rente : en l&rsquo;absence de relation d&rsquo;ordre math\u00e9matique pr\u00e9\u00e9tablie entre des cat\u00e9gories nominales pures, d\u00e9finir un minimum est un non-sens statistique. En revanche, si la variable est explicitement d\u00e9clar\u00e9e comme un facteur ordonn\u00e9 (<strong>ordered factor<\/strong>) au moyen du param\u00e8tre <em>ordered = TRUE<\/em>, R active la m\u00e9thode g\u00e9n\u00e9rique correspondante :<\/p>\n<p><em>stade_maladie &lt;- factor(c(\u00ab\u00a0Leger\u00a0\u00bb, \u00ab\u00a0Severe\u00a0\u00bb, \u00ab\u00a0Modere\u00a0\u00bb), levels = c(\u00ab\u00a0Leger\u00a0\u00bb, \u00ab\u00a0Modere\u00a0\u00bb, \u00ab\u00a0Severe\u00a0\u00bb), ordered = TRUE)<\/em><br \/><em>min(stade_maladie)<\/em> renvoie fid\u00e8lement \u00ab\u00a0Leger\u00a0\u00bb avec ses m\u00e9tadonn\u00e9es d&rsquo;ordonnancement hi\u00e9rarchique.<\/p>\n<p>Cette distinction fondamentale oblige le chercheur \u00e0 d\u00e9finir rigoureusement le syst\u00e8me de gradation conceptuelle de ses variables ordinales lors de l&rsquo;\u00e9tape d&rsquo;importation.<\/p>\n<h2>11. Pi\u00e8ges m\u00e9thodologiques, cas limites et optimisation computationnelle<\/h2>\n<h3>11.1 Divergences de pr\u00e9cision li\u00e9es \u00e0 l&rsquo;arithm\u00e9tique en virgule flottante<\/h3>\n<p>Une source insidieuse de bogues dans les analyses quantitatives programm\u00e9es sous R r\u00e9side dans les approximations inh\u00e9rentes \u00e0 la norme <a rel=\"noopener noreferrer\" href=\"https:\/\/docs.oracle.com\/cd\/E19957-01\/806-3568\/ncg_goldberg.html\">IEEE 754 pour les calculs en virgule flottante<\/a> \u00e0 double pr\u00e9cision. Dans cette repr\u00e9sentation binaire machine, des fractions d\u00e9cimales \u00e9l\u00e9mentaires comme 0.1, 0.2 ou 0.3 ne poss\u00e8dent pas d&rsquo;\u00e9quivalent binaire fini et sont sujettes \u00e0 des erreurs d&rsquo;arrondi infinit\u00e9simales de l&rsquo;ordre de 1e-16 :<\/p>\n<p><em>valeurs_test &lt;- c(0.3, 0.4 &#8211; 0.1, 0.5 &#8211; 0.2)<\/em><br \/><em>min_val &lt;- min(valeurs_test)<\/em><br \/><em>valeurs_test == min_val<\/em><\/p>\n<p>L&rsquo;ex\u00e9cution de ce test d&rsquo;\u00e9galit\u00e9 logique directe peut produire des r\u00e9sultats d\u00e9concertants, r\u00e9v\u00e9lant que certains \u00e9l\u00e9ments conceptuellement identiques au minimum th\u00e9orique sont \u00e9valu\u00e9s \u00e0 <em>FALSE<\/em> en raison d&rsquo;une d\u00e9viation sur le 53e bit de la mantisse binaire.<\/p>\n<p>Pour immuniser les scripts d&rsquo;analyse contre ces artefacts de pr\u00e9cision num\u00e9rique lors de la comparaison avec les bornes calcul\u00e9es par <strong>min()<\/strong> ou <strong>max()<\/strong>, il est imp\u00e9ratif d&rsquo;abandonner l&rsquo;op\u00e9rateur d&rsquo;\u00e9galit\u00e9 stricte <em>==<\/em> au profit d&rsquo;une fonction de comparaison \u00e0 tol\u00e9rance finie, telle que <strong>all.equal()<\/strong> ou un seuillage par valeur absolue :<\/p>\n<p><em>abs(valeurs_test &#8211; min_val) &lt; 1e-9<\/em><\/p>\n<p>Cette pr\u00e9caution algorithmique garantit la fiabilit\u00e9 des proc\u00e9dures de filtrage lorsque les extrema d\u00e9coulent de calculs arithm\u00e9tiques pr\u00e9alables.<\/p>\n<h3>11.2 Impact des donn\u00e9es manquantes sur l&rsquo;interpr\u00e9tabilit\u00e9 globale<\/h3>\n<p>L&rsquo;amputation non r\u00e9fl\u00e9chie des valeurs manquantes via l&rsquo;inclusion automatique de <strong>na.rm = TRUE<\/strong> repr\u00e9sente un risque m\u00e9thodologique sous-estim\u00e9 dans les sciences empiriques. L&rsquo;acte technique de masquer les <em>NA<\/em> n&rsquo;\u00e9limine pas l&rsquo;incertitude \u00e9pist\u00e9mique sous-jacente ; il d\u00e9place le probl\u00e8me vers la repr\u00e9sentativit\u00e9 de l&rsquo;\u00e9chantillon analys\u00e9.<\/p>\n<p>Lorsqu&rsquo;un chercheur traite des donn\u00e9es cliniques longitudinales, l&rsquo;apparition de valeurs manquantes peut survenir de fa\u00e7on pr\u00e9f\u00e9rentielle aux stades critiques de la maladie. Si l&rsquo;\u00e9valuation des bornes de survie ou d&rsquo;efficacit\u00e9 th\u00e9rapeutique \u00e9limine les patients d\u00e9c\u00e9d\u00e9s ou ayant interrompu le protocole sans mod\u00e9liser le m\u00e9canisme d&rsquo;attrition, les valeurs minimales observ\u00e9es sur les param\u00e8tres de sant\u00e9 refl\u00e8tent une sous-population artificiellement pr\u00e9serv\u00e9e. Ce ph\u00e9nom\u00e8ne introduit un biais de s\u00e9lection majeur susceptible d&rsquo;invalider les conclusions d&rsquo;une \u00e9tude d&rsquo;intervention.<\/p>\n<p>Par cons\u00e9quent, tout recours \u00e0 l&rsquo;argument <em>na.rm = TRUE<\/em> pour le calcul des extrema doit \u00eatre pr\u00e9c\u00e9d\u00e9 d&rsquo;une analyse syst\u00e9matique des motifs d&rsquo;absence (patterns de donn\u00e9es manquantes). La documentation des articles scientifiques conformes aux normes APA doit expliciter sans ambigu\u00eft\u00e9 le nombre d&rsquo;observations manquantes soustraites au calcul des bornes descriptives, accompagnant syst\u00e9matiquement les indices de <strong>min()<\/strong> et <strong>max()<\/strong> de l&rsquo;effectif valide effectif (<em>N valide<\/em>).<\/p>\n<h3>11.3 Programmation d\u00e9fensive et validation formelle des entr\u00e9es<\/h3>\n<p>Dans un contexte de d\u00e9ploiement en production ou lors de l&rsquo;ex\u00e9cution de cha\u00eenes de traitement par lots (batch processing) sur de multiples jeux de donn\u00e9es h\u00e9t\u00e9rog\u00e8nes, l&rsquo;analyste ne peut se fier \u00e0 la conformit\u00e9 a priori des structures entrantes. L&rsquo;impl\u00e9mentation d&rsquo;une programmation d\u00e9fensive rigoureuse s&rsquo;impose pour \u00e9viter les ruptures inopin\u00e9es de scripts dues \u00e0 des arguments corrompus.<\/p>\n<p>Cette d\u00e9marche implique l&rsquo;adjonction de gardes-fous logiques avant tout calcul critique d&rsquo;extremum. On exploitera judicieusement la fonction native <strong>stopifnot()<\/strong> ou les pr\u00e9dicats de biblioth\u00e8ques d&rsquo;assertion sp\u00e9cialis\u00e9es telles que <strong>checkmate<\/strong> :<\/p>\n<p><em>calculer_bornes_securisees &lt;- function(vecteur) {<\/em><br \/><em>&nbsp;&nbsp;stopifnot(is.numeric(vecteur))<\/em><br \/><em>&nbsp;&nbsp;stopifnot(length(vecteur) &gt; 0)<\/em><br \/><em>&nbsp;&nbsp;if (all(is.na(vecteur))) {<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;warning(\u00ab\u00a0Pr\u00e9sence exclusive de donn\u00e9es manquantes NA.\u00a0\u00bb)<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;return(c(min = NA_real_, max = NA_real_))<\/em><br \/><em>&nbsp;&nbsp;}<\/em><br \/><em>&nbsp;&nbsp;c(min = min(vecteur, na.rm = TRUE), max = max(vecteur, na.rm = TRUE))<\/em><br \/><em>}<\/em><\/p>\n<p>En interceptant en amont les vecteurs de type non conforme, les vecteurs de dimension nulle ou les collections exclusivement compos\u00e9es de <em>NA<\/em>, cette fonction s\u00e9curis\u00e9e d\u00e9samorce les avertissements cryptiques g\u00e9n\u00e9rant des infinis inattendus (+Inf\/-Inf) et fiabilise l&rsquo;ex\u00e9cution des macro-analyses automatis\u00e9es.<\/p>\n<h2>12. \u00c9tudes de cas concr\u00e8tes appliqu\u00e9es \u00e0 la psychologie et aux neurosciences<\/h2>\n<h3>12.1 \u00c9tude 1 : Nettoyage des temps de r\u00e9action dans une t\u00e2che de Stroop<\/h3>\n<p>L&rsquo;effet Stroop constitue l&rsquo;un des paradigmes exp\u00e9rimentaux les plus embl\u00e9matiques de la psychologie cognitive pour mesurer le contr\u00f4le attentionnel et l&rsquo;inhibition cognitive. Dans ce protocole, les sujets doivent d\u00e9nommer la couleur d&rsquo;affichage d&rsquo;un mot tout en ignorant sa signification s\u00e9mantique (ex : le mot \u00ab\u00a0ROUGE\u00a0\u00bb affich\u00e9 en encre bleue). La chronom\u00e9trie des r\u00e9ponses requiert un assainissement rigoureux des latences au moyen des primitives de bornage statistique.<\/p>\n<p>Consid\u00e9rons un \u00e9chantillon de passation brute comportant des latences enregistr\u00e9es en millisecondes :<\/p>\n<p><em>tr_bruts &lt;- c(45, 412, 530, 489, 12, 620, 495, 3200, 510, NA, 478)<\/em><\/p>\n<p>La premi\u00e8re phase op\u00e9ratoire consiste \u00e0 quantifier les bornes absolues observ\u00e9es \u00e0 l&rsquo;aide de <strong>min()<\/strong> et <strong>max()<\/strong> :<\/p>\n<p><em>min_observe &lt;- min(tr_bruts, na.rm = TRUE)<\/em> renvoie 12 ms.<br \/><em>max_observe &lt;- max(tr_bruts, na.rm = TRUE)<\/em> renvoie 3200 ms.<\/p>\n<p>D&rsquo;un point de vue neurophysiologique, un temps de r\u00e9action de 12 ms est strictement incompatible avec le temps minimal n\u00e9cessaire \u00e0 la transduction photor\u00e9ceptrice r\u00e9tinienne, \u00e0 la transmission thalamo-corticale et \u00e0 l&rsquo;ex\u00e9cution de la commande motrice par la voie pyramidale (seuil physiologique absolu estim\u00e9 \u00e0 au moins 150 ms). Cette valeur correspond indubitablement \u00e0 un d\u00e9clenchement moteur anticip\u00e9 ou \u00e0 un bruit m\u00e9canique du capteur. Corr\u00e9lativement, une latence de 3200 ms refl\u00e8te une d\u00e9connexion attentionnelle majeure.<\/p>\n<p>L&rsquo;analyste \u00e9tablit donc un filtre bas\u00e9 sur des seuils rationnels [200 ms, 1200 ms] en conjuguant indexation logique et v\u00e9rification des extrema \u00e9pur\u00e9s :<\/p>\n<p><em>tr_nettoyes &lt;- tr_bruts[!is.na(tr_bruts) &amp; tr_bruts &gt;= 200 &amp; tr_bruts &lt;= 1200]<\/em><br \/><em>min_epure &lt;- min(tr_nettoyes)<\/em> renvoie 412 ms.<br \/><em>max_epure &lt;- max(tr_nettoyes)<\/em> renvoie 620 ms.<\/p>\n<p>La distribution est d\u00e9sormais parfaitement assainie et pr\u00eate pour la mod\u00e9lisation param\u00e9trique. La visualisation sous <strong>ggplot2<\/strong> permettra d&rsquo;ajouter des lignes verticales de r\u00e9f\u00e9rence marquant explicitement les seuils th\u00e9oriques retenus (<em>geom_vline(xintercept = c(200, 1200), linetype = \u00ab\u00a0dashed\u00a0\u00bb, color = \u00ab\u00a0red\u00a0\u00bb)<\/em>).<\/p>\n<h3>12.2 \u00c9tude 2 : Normalisation Min-Max de scores d&rsquo;anxi\u00e9t\u00e9 et de d\u00e9pression<\/h3>\n<p>En psychopathologie quantitative, la mod\u00e9lisation conjointe de plusieurs dimensions cliniques \u2014 telles que l&rsquo;anxi\u00e9t\u00e9 mesur\u00e9e par le questionnaire STAI (State-Trait Anxiety Inventory, \u00e9chelle de 20 \u00e0 80) et la s\u00e9v\u00e9rit\u00e9 d\u00e9pressive \u00e9valu\u00e9e par le BDI (Beck Depression Inventory, \u00e9chelle de 0 \u00e0 63) \u2014 se heurte \u00e0 l&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des m\u00e9triques de mesure d&rsquo;origine. Pour comparer ces profils symptomatiques sans d\u00e9formation artificielle de l&rsquo;espace variance-covariance, la normalisation unitaire Min-Max est abondamment mobilis\u00e9e.<\/p>\n<p>Concevons une fonction formalis\u00e9e sous R exploitant rigoureusement les primitives <strong>min()<\/strong> et <strong>max()<\/strong> :<\/p>\n<p><em>normalisation_min_max &lt;- function(x) {<\/em><br \/><em>&nbsp;&nbsp;borne_inf &lt;- min(x, na.rm = TRUE)<\/em><br \/><em>&nbsp;&nbsp;borne_sup &lt;- max(x, na.rm = TRUE)<\/em><br \/><em>&nbsp;&nbsp;if (borne_sup == borne_inf) return(rep(0, length(x)))<\/em><br \/><em>&nbsp;&nbsp;(x &#8211; borne_inf) \/ (borne_sup &#8211; borne_inf)<\/em><br \/><em>}<\/em><\/p>\n<p>Appliquons cette proc\u00e9dure sur un \u00e9chantillon clinique composite :<\/p>\n<p><em>score_anxiete &lt;- c(25, 45, 78, 32, 60)<\/em><br \/><em>score_depression &lt;- c(5, 18, 52, 12, 38)<\/em><br \/><em>anxiete_norm &lt;- normalisation_min_max(score_anxiete)<\/em><br \/><em>depression_norm &lt;- normalisation_min_max(score_depression)<\/em><\/p>\n<p>Gr\u00e2ce \u00e0 cette transformation, les deux constellations symptomatiques sont projet\u00e9es sur un continuum standardis\u00e9 strictly born\u00e9 entre [0.0, 1.0]. Le praticien peut d\u00e8s lors calculer un indice global de d\u00e9tresse psychologique par moyenne pond\u00e9r\u00e9e des deux composantes normalis\u00e9es sans qu&rsquo;une \u00e9chelle ne vienne \u00e9craser math\u00e9matiquement l&rsquo;autre en raison de son \u00e9tendue num\u00e9rique brute plus \u00e9tendue.<\/p>\n<h3>12.3 \u00c9tude 3 : D\u00e9tection d&rsquo;effets plancher et plafond dans des \u00e9chelles psychom\u00e9triques<\/h3>\n<p>La validit\u00e9 diff\u00e9rentielle d&rsquo;un instrument psychom\u00e9trique d\u00e9pend de sa capacit\u00e9 \u00e0 discriminer les individus sur l&rsquo;ensemble du continuum de l&rsquo;aptitude latente mesur\u00e9e. Deux \u00e9cueils structurels menacent cette validit\u00e9 : <strong>l&rsquo;effet plancher<\/strong> (une proportion disproportionn\u00e9e de participants atteint le score minimum th\u00e9orique de l&rsquo;\u00e9chelle, sugg\u00e9rant un test excessivement ardu) et <strong>l&rsquo;effet plafond<\/strong> (les participants atteignent massivement le score maximal, traduisant un test trivialement facile). L&rsquo;utilisation de <strong>min()<\/strong>, <strong>max()<\/strong> et de l&rsquo;op\u00e9rateur d&rsquo;\u00e9galit\u00e9 permet d&rsquo;automatiser cette d\u00e9tection psychom\u00e9trique.<\/p>\n<p>Consid\u00e9rons un tableau de passation \u00e9valuant une \u00e9preuve d&rsquo;efficience mn\u00e9sique cod\u00e9e sur 30 points administr\u00e9e \u00e0 une cohorte de 200 participants \u00e2g\u00e9s :<\/p>\n<p><em>calculer_saturation_echelle &lt;- function(scores, score_min_theorique = 0, score_max_theorique = 30) {<\/em><br \/><em>&nbsp;&nbsp;n_total &lt;- sum(!is.na(scores))<\/em><br \/><em>&nbsp;&nbsp;nb_plancher &lt;- sum(scores == min(scores, na.rm = TRUE), na.rm = TRUE)<\/em><br \/><em>&nbsp;&nbsp;nb_plafond &lt;- sum(scores == max(scores, na.rm = TRUE), na.rm = TRUE)<\/em><br \/><em>&nbsp;&nbsp;pct_plancher &lt;- (nb_plancher \/ n_total) * 100<\/em><br \/><em>&nbsp;&nbsp;pct_plafond &lt;- (nb_plafond \/ n_total) * 100<\/em><br \/><em>&nbsp;&nbsp;list(<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Minimum_Observe = min(scores, na.rm = TRUE),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Maximum_Observe = max(scores, na.rm = TRUE),<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Pourcentage_Plancher = pct_plancher,<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Pourcentage_Plafond = pct_plafond,<\/em><br \/><em>&nbsp;&nbsp;&nbsp;&nbsp;Alerte_Sensibilite = (pct_plancher &gt; 15 || pct_plafond &gt; 15)<\/em><br \/><em>&nbsp;&nbsp;)<\/em><br \/><em>}<\/em><\/p>\n<p>Dans la litt\u00e9rature de r\u00e9f\u00e9rence en psychom\u00e9trie, un taux de saturation plancher ou plafond exc\u00e9dant 15 % signale une perte critique de sensibilit\u00e9 diff\u00e9rentielle de l&rsquo;instrument. Le script formalis\u00e9 ci-dessus alerte automatiquement le m\u00e9thodologue sur la n\u00e9cessit\u00e9 de r\u00e9viser le panel d&rsquo;items, par exemple en introduisant des questions de complexit\u00e9 gradu\u00e9e sup\u00e9rieure afin de restaurer une distribution sym\u00e9trique gaussienne ad\u00e9quate pour l&rsquo;estimation des scores selon la th\u00e9orie de r\u00e9ponse aux items (TRI).<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<p>Bengtsson, H. (2021). <em>matrixStats: Functions that apply to rows and columns of matrices (and to vectors)<\/em> (R package version 0.61.0). Comprehensive R Archive Network. <a rel=\"noopener noreferrer\" href=\"https:\/\/CRAN.R-project.org\/package=matrixStats\">https:\/\/CRAN.R-project.org\/package=matrixStats<\/a><\/p>\n<p>Goldberg, D. (1991). What every computer scientist should know about floating-point arithmetic. <em>ACM Computing Surveys<\/em>, 23(1), 5-48. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/103162.103163\">https:\/\/doi.org\/10.1145\/103162.103163<\/a><\/p>\n<p>IEEE. (2019). <em>IEEE Standard for Floating-Point Arithmetic<\/em> (IEEE Std 754-2019). Institute of Electrical and Electronics Engineers. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/IEEESTD.2019.8766229\">https:\/\/doi.org\/10.1109\/IEEESTD.2019.8766229<\/a><\/p>\n<p>Little, R. J. A., &amp; Rubin, D. B. (2019). <em>Statistical analysis with missing data<\/em> (3e \u00e9d.). John Wiley &amp; Sons. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/9781119482865\">https:\/\/doi.org\/10.1002\/9781119482865<\/a><\/p>\n<p>R Core Team. (2023). <em>R: A language and environment for statistical computing<\/em>. R Foundation for Statistical Computing. <a rel=\"noopener noreferrer\" href=\"https:\/\/www.R-project.org\/\">https:\/\/www.R-project.org\/<\/a><\/p>\n<p>Tukey, J. W. (1977). <em>Exploratory data analysis<\/em>. Addison-Wesley.<\/p>\n<p>Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., Fran\u00e7ois, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., Kuhn, M., Pedersen, T. L., Miller, E., Bache, S. M., M\u00fcller, K., Ooms, J., Robinson, D., Seidel, D. P., Spinu, V., Takahashi, K., Vaughan, D., Wilke, C., Woo, K., &amp; Yutani, H. (2019). Welcome to the Tidyverse. <em>Journal of Open Source Software<\/em>, 4(43), 1686. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.21105\/joss.01686\">https:\/\/doi.org\/10.21105\/joss.01686<\/a><\/p>\n<p>Wickham, H. (2019). <em>Advanced R<\/em> (2e \u00e9d.). Chapman and Hall\/CRC. <a rel=\"noopener noreferrer\" href=\"https:\/\/adv-r.hadley.nz\/\">https:\/\/adv-r.hadley.nz\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guide complet sur les fonctions min() et max() en R. Apprenez \u00e0 trouver les extr\u00eames dans des vecteurs, data frames et jeux de donn\u00e9es psychom\u00e9triques.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2193,3910],"tags":[1884,4078,3002,16,2884],"class_list":["post-2035","psych_stat","type-psych_stat","status-publish","hentry","category-programmation-r","category-statistiques-et-psychometrie","tag-analyse-de-donnees","tag-min-et-max","tag-nettoyage-de-donnees","tag-psychometrie","tag-r-base"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2035"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2035\/revisions"}],"predecessor-version":[{"id":16307,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2035\/revisions\/16307"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}