{"id":5213,"date":"2026-10-14T18:01:58","date_gmt":"2026-10-14T18:01:58","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-supprimer-valeurs-na-vecteur-r-3-methodes\/"},"modified":"2026-10-14T18:01:58","modified_gmt":"2026-10-14T18:01:58","slug":"comment-supprimer-valeurs-na-vecteur-r-3-methodes","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-supprimer-valeurs-na-vecteur-r-3-methodes","title":{"rendered":"Comment supprimer les valeurs NA d&rsquo;un vecteur dans R (3 m\u00e9thodes)"},"content":{"rendered":"<p>Dans le domaine de l&rsquo;analyse statistique contemporaine et de la science des donn\u00e9es, le langage de programmation R occupe une position pr\u00e9pond\u00e9rante, conf\u00e9r\u00e9e tant par son expressivit\u00e9 math\u00e9matique que par la richesse de son \u00e9cosyst\u00e8me de paquets. Con\u00e7u d\u00e8s l&rsquo;origine par Ross Ihaka et Robert Gentleman comme une impl\u00e9mentation moderne du langage S, R a \u00e9t\u00e9 structur\u00e9 autour d&rsquo;un paradigme vectoriel o\u00f9 toute entit\u00e9 fondamentale est appr\u00e9hend\u00e9e sous la forme d&rsquo;une collection ordonn\u00e9e d&rsquo;\u00e9l\u00e9ments partageant une m\u00eame nature atomique. Toutefois, la manipulation de donn\u00e9es empiriques issues d&rsquo;enqu\u00eates sociologiques, d&rsquo;essais cliniques, de capteurs industriels ou de registres administratifs confronte in\u00e9vitablement le praticien \u00e0 une difficult\u00e9 m\u00e9thodologique majeure : l&rsquo;existence d&rsquo;observations incompl\u00e8tes, alt\u00e9r\u00e9es ou manquantes. <\/p>\n<p>La gestion rigoureuse de ces lacunes constitue une \u00e9tape charni\u00e8re qui conditionne directement la validit\u00e9 interne des estimations statistiques et la robustesse des mod\u00e8les pr\u00e9dictifs ult\u00e9rieurs. Dans l&rsquo;\u00e9cosyst\u00e8me R, cette r\u00e9alit\u00e9 se mat\u00e9rialise par la pr\u00e9sence d&rsquo;une constante particuli\u00e8re, d\u00e9sign\u00e9e sous le symbole <em>NA<\/em> (pour <em>Not Available<\/em>). Contrairement \u00e0 de simples z\u00e9ros ou \u00e0 des cha\u00eenes de caract\u00e8res vides, cette entit\u00e9 porte une signification \u00e9pist\u00e9mologique pr\u00e9cise, signalant l&rsquo;ind\u00e9termination fondamentale d&rsquo;une valeur sans pour autant alt\u00e9rer la structure sous-jacente du conteneur vectoriel. Cependant, en raison des r\u00e8gles de la logique ternaire et du principe de propagation des ind\u00e9terminations arithm\u00e9tiques, l&rsquo;existence d&rsquo;une seule valeur manquante au sein d&rsquo;un vecteur num\u00e9rique suffit \u00e0 paralyser ou \u00e0 biaiser l&rsquo;ex\u00e9cution de la majorit\u00e9 des fonctions descriptives courantes.<\/p>\n<p>Face \u00e0 cet imp\u00e9ratif d&rsquo;assainissement, l&rsquo;architecture du langage offre plusieurs strat\u00e9gies distinctes pour \u00e9vincer ces \u00e9l\u00e9ments perturbateurs. L&rsquo;analyste se trouve r\u00e9guli\u00e8rement confront\u00e9 \u00e0 l&rsquo;arbitrage entre l&rsquo;\u00e9lagage direct du vecteur, l&rsquo;omission contextuelle d\u00e9l\u00e9gu\u00e9e aux sous-routines internes, ou encore l&rsquo;utilisation de fonctions g\u00e9n\u00e9riques sp\u00e9cialis\u00e9es enrichissant l&rsquo;objet de m\u00e9tadonn\u00e9es indiciaires. L&rsquo;objet de cet article est d&rsquo;analyser en profondeur les m\u00e9canismes th\u00e9oriques, computationnels et statistiques pr\u00e9sidant au traitement des donn\u00e9es manquantes dans les vecteurs atomiques au moyen des trois approches canoniques : le filtrage bool\u00e9en par masquage logique via <em>is.na()<\/em>, l&rsquo;exclusion op\u00e9rationnelle \u00e0 travers le param\u00e8tre <em>na.rm<\/em>, et l&rsquo;\u00e9lagage structurel offert par la fonction <em>na.omit()<\/em>.<\/p>\n<h2>1. Introduction \u00e0 la gestion des valeurs manquantes dans les vecteurs R<\/h2>\n<h3>1.1 Nature et omnipr\u00e9sence des valeurs NA dans les ensembles de donn\u00e9es<\/h3>\n<p>Le concept de valeur manquante au sein du langage <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">R Project for Statistical Computing<\/a> trouve son expression formelle dans le symbole <em>NA<\/em>. Cette valeur sentinelle est une abstraction s\u00e9miotique fondamentale permettant de consigner l&rsquo;absence d&rsquo;information relative \u00e0 une unit\u00e9 d&rsquo;observation. Dans les protocoles de collecte empirique, qu&rsquo;il s&rsquo;agisse d&rsquo;\u00e9valuations psychom\u00e9triques, d&rsquo;essais pharmacologiques randomis\u00e9s ou d&rsquo;enregistrements issus de r\u00e9seaux de capteurs physiques, la survenue de donn\u00e9es manquantes est la r\u00e8gle plut\u00f4t que l&rsquo;exception. Un sujet d&rsquo;exp\u00e9rience peut refuser de r\u00e9pondre \u00e0 un item d\u00e9licat d&rsquo;un questionnaire, un \u00e9quipement de mesure peut subir une saturation transitoire ou une d\u00e9faillance de t\u00e9l\u00e9transmission, ou un \u00e9chantillon biologique peut \u00eatre contamin\u00e9 au cours de la manipulation en laboratoire. Dans chacune de ces occurrences, l&rsquo;assignation d&rsquo;une valeur num\u00e9rique arbitraire telle que z\u00e9ro introduirait une d\u00e9viation math\u00e9matique majeure, susceptible de distordre lourdement les moments statistiques d&rsquo;ordre un et deux, tels que l&rsquo;esp\u00e9rance et la variance.<\/p>\n<p>L&rsquo;impact de la pr\u00e9sence de valeurs <em>NA<\/em> sur l&rsquo;int\u00e9grit\u00e9 du calcul vectoriel est imm\u00e9diat et d\u00e9vastateur si aucun m\u00e9canisme de contr\u00f4le n&rsquo;est interpos\u00e9. En vertu du respect strict des axiomes de la logique computationnelle, une op\u00e9ration portant sur une grandeur inconnue produit in\u00e9luctablement un r\u00e9sultat inconnu. Ainsi, sommer un ensemble de nombres comprenant une lacune revient conceptuellement \u00e0 tenter de d\u00e9terminer la masse totale d&rsquo;un ensemble d&rsquo;objets dont l&rsquo;un poss\u00e9derait un poids ind\u00e9terminable. Par cons\u00e9quent, les vecteurs pollu\u00e9s par des <em>NA<\/em> propagent cette incertitude \u00e0 l&rsquo;ensemble du pipeline analytique, corrompant les calculs de covariances, les matrices de corr\u00e9lation et les projections factorielles.<\/p>\n<p>Il importe en outre d&rsquo;\u00e9tablir une distinction th\u00e9orique fondamentale et rigoureuse entre la valeur <em>NA<\/em> et le symbole <em>NaN<\/em> (<em>Not a Number<\/em>). Alors que le marqueur <em>NA<\/em> symbolise une lacune d&rsquo;information contextuelle concernant une valeur qui existe potentiellement dans le monde r\u00e9el mais qui n&rsquo;a pas pu \u00eatre enregistr\u00e9e, <em>NaN<\/em> d\u00e9coule directement de l&rsquo;application de la norme en virgule flottante <a rel=\"noopener noreferrer\" href=\"https:\/\/standards.ieee.org\/ieee\/754\/6210\/\">IEEE 754<\/a>. Le symbole <em>NaN<\/em> sanctionne une impossibilit\u00e9 arithm\u00e9tique absolue, telle que la division de z\u00e9ro par z\u00e9ro, la soustraction de l&rsquo;infini par l&rsquo;infini ou l&rsquo;\u00e9valuation du logarithme d&rsquo;un nombre n\u00e9gatif sur le corps des r\u00e9els. Bien que les fonctions de v\u00e9rification bool\u00e9enne telles que <em>is.na()<\/em> renvoient la valeur logique <em>TRUE<\/em> face \u00e0 un <em>NaN<\/em> (consid\u00e9rant qu&rsquo;un r\u00e9sultat non num\u00e9rique est \u00e9galement une observation indisponible), la r\u00e9ciproque n&rsquo;est pas vraie : un <em>NA<\/em> classique ne saurait \u00eatre qualifi\u00e9 de <em>NaN<\/em> par la primitive <em>is.nan()<\/em>. La ma\u00eetrise de cette fronti\u00e8re s\u00e9mantique est indispensable pour isoler les erreurs algorithmiques pures des simples carences de mesure.<\/p>\n<h3>1.2 Cons\u00e9quences de la pr\u00e9sence de NA sur les op\u00e9rations fondamentales<\/h3>\n<p>L&rsquo;introduction d&rsquo;un <em>NA<\/em> dans une cha\u00eene d&rsquo;\u00e9valuation arithm\u00e9tique engendre un ph\u00e9nom\u00e8ne syst\u00e9matique de contamination descendante. Dans le mod\u00e8le de calcul de R, les op\u00e9rateurs primitifs d&rsquo;addition, de soustraction, de multiplication ou d&rsquo;exponentiation appliquent aveugl\u00e9ment les lois de la logique tri-valu\u00e9e de Kleene. Si l&rsquo;on applique l&rsquo;op\u00e9rateur d&rsquo;addition vectorielle entre un scalaire d\u00e9fini et un scalaire non disponible, le syst\u00e8me retourne irr\u00e9vocablement un <em>NA<\/em>. Cette logique de pr\u00e9servation de l&rsquo;ignorance math\u00e9matique s&rsquo;\u00e9tend aux fonctions d&rsquo;agr\u00e9gation statistique \u00e9l\u00e9mentaires telles que <em>sum()<\/em>, <em>mean()<\/em>, <em>median()<\/em>, <em>var()<\/em> ou <em>sd()<\/em>. Par d\u00e9faut, chacune de ces fonctions retournera la constante <em>NA<\/em> d\u00e8s lors qu&rsquo;un seul \u00e9l\u00e9ment du vecteur d&rsquo;entr\u00e9e s&rsquo;av\u00e8re non renseign\u00e9, paralysant l&rsquo;inf\u00e9rence descriptive globale de l&rsquo;\u00e9chantillon.<\/p>\n<p>Cet \u00e9chec syst\u00e9matique des fonctions d&rsquo;agr\u00e9gation n&rsquo;est pas un d\u00e9faut d&rsquo;impl\u00e9mentation de R, mais rel\u00e8ve d&rsquo;un choix d\u00e9lib\u00e9r\u00e9 et rigoureux de conception logicielle. Le langage refuse d&rsquo;adopter une posture t\u00e9l\u00e9ologique consistant \u00e0 deviner les intentions de l&rsquo;analyste. Si l&rsquo;utilisateur sollicite la moyenne d&rsquo;un ensemble de dix observations dont une est absente, le calcul formellement exact de la moyenne empirique de la population observ\u00e9e ne peut \u00eatre \u00e9tabli sans formuler une hypoth\u00e8se explicite sur la valeur manquante. Cette architecture impose \u00e0 l&rsquo;analyste de prendre une d\u00e9cision \u00e9clair\u00e9e : exclure l&rsquo;observation manquante, lui imputer une valeur vraisemblable selon un mod\u00e8le stochastique, ou suspendre l&rsquo;inf\u00e9rence.<\/p>\n<p>D\u00e8s lors, l&rsquo;assainissement vectoriel contr\u00f4l\u00e9 devient une \u00e9tape m\u00e9thodologique imp\u00e9rative dans tout protocole de recherche scientifique ou d&rsquo;ing\u00e9nierie pr\u00e9dictive. L&rsquo;extraction anarchique ou inconsciente de valeurs <em>NA<\/em> peut induire des alt\u00e9rations structurelles insidieuses, notamment une troncature artificielle de la distribution empirique ou une perte m\u00e9canique de puissance statistique lors des tests d&rsquo;hypoth\u00e8ses subs\u00e9quents. L&rsquo;analyste doit ainsi appr\u00e9hender les vecteurs non pas comme de simples listes de nombres, mais comme des structures formelles ob\u00e9issant \u00e0 des contrats d&rsquo;int\u00e9grit\u00e9 de donn\u00e9es extr\u00eamement stricts.<\/p>\n<h2>2. Typologie et s\u00e9mantique des valeurs NA dans l&rsquo;environnement R<\/h2>\n<h3>2.1 Sous-classes atomiques du type NA dans R<\/h3>\n<p>Sous l&rsquo;apparente simplicit\u00e9 du symbole universel <em>NA<\/em> se dissimule une architecture interne sophistiqu\u00e9e, r\u00e9gie par la structure des vecteurs atomiques de base du langage R. Dans la conception structurelle de R, document\u00e9e de mani\u00e8re exhaustive dans le manuel de r\u00e9f\u00e9rence <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-ints.html\">R Internals<\/a>, un vecteur atomique est une structure de donn\u00e9es contigu\u00eb en m\u00e9moire vive, caract\u00e9ris\u00e9e par une homog\u00e9n\u00e9it\u00e9 absolue de type. Par cons\u00e9quent, il est techniquement impossible qu&rsquo;un scalaire de type ind\u00e9termin\u00e9 coexiste au sein d&rsquo;un vecteur num\u00e9rique sans \u00eatre lui-m\u00eame formellement typ\u00e9. Pour surmonter cette contrainte architecturale, le noyau C de R impl\u00e9mente plusieurs variantes sp\u00e9cialis\u00e9es de la valeur manquante, correspondant aux diff\u00e9rents types fondamentaux : <em>NA_real_<\/em> pour le type num\u00e9rique \u00e0 virgule flottante double pr\u00e9cision, <em>NA_integer_<\/em> pour les entiers sign\u00e9s sur 32 bits, <em>NA_character_<\/em> pour les cha\u00eenes textuelles, et <em>NA_complex_<\/em> pour les nombres complexes.<\/p>\n<p>Lorsqu&rsquo;un utilisateur d\u00e9clare simplement la constante <em>NA<\/em> sans suffixe ni qualification explicite, celle-ci est initialement instanci\u00e9e sous la forme d&rsquo;un vecteur logique de longueur un, car le type logique est le plus permissif dans la hi\u00e9rarchie des coercitions. Cependant, d\u00e8s que cette constante est introduite au sein d&rsquo;un vecteur pr\u00e9existant ou lors de la concat\u00e9nation via la fonction primitive <em>c()<\/em>, les m\u00e9canismes d&rsquo;interfa\u00e7age de type de R d\u00e9clenchent une op\u00e9ration de coercition implicite descendante. Si le vecteur r\u00e9cepteur est de type <em>numeric<\/em> (r\u00e9el), le symbole g\u00e9n\u00e9rique <em>NA<\/em> est instantan\u00e9ment et silencieusement transform\u00e9 en <em>NA_real_<\/em>, encod\u00e9 au niveau binaire sous la forme d&rsquo;une valeur sp\u00e9ciale de mantisse IEEE 754 pr\u00e9servant le bit de signalement d&rsquo;invalidit\u00e9 num\u00e9rique.<\/p>\n<p>Cette invariance de taille et ce typage fort au niveau de la repr\u00e9sentation sous-jacente garantissent que la pr\u00e9sence d&rsquo;un <em>NA<\/em> ne d\u00e9grade pas le contrat de performance des algorithmes compil\u00e9s sous-jacents en C ou en Fortran qui exploitent les vecteurs R. Chaque cellule d&rsquo;un vecteur num\u00e9rique occupe immuablement 64 bits en m\u00e9moire vive, que cette cellule h\u00e9berge un nombre r\u00e9el r\u00e9gulier ou la valeur <em>NA_real_<\/em>. L&rsquo;allocation de m\u00e9moire demeure donc lin\u00e9aire et continue, \u00e9vitant l&rsquo;instabilit\u00e9 de structures h\u00e9t\u00e9rog\u00e8nes. Cette rigueur structurelle permet \u00e0 R de maintenir une vitesse de parcours s\u00e9quentiel maximale lors de l&rsquo;ex\u00e9cution d&rsquo;it\u00e9rations vectorielles bas niveau.<\/p>\n<h3>2.2 Comportement bool\u00e9en et test de vacuit\u00e9<\/h3>\n<p>Une des sources d&rsquo;erreurs les plus r\u00e9currentes rencontr\u00e9es par les programmeurs novices ou issus d&rsquo;autres environnements de d\u00e9veloppement r\u00e9side dans la tentative intuitive d&rsquo;identifier une valeur manquante au moyen de l&rsquo;op\u00e9rateur relationnel d&rsquo;\u00e9galit\u00e9 stricte <em>==<\/em>. L&rsquo;ex\u00e9cution d&rsquo;une instruction telle que <em>data == NA<\/em> conduit invariablement \u00e0 un vecteur compos\u00e9 int\u00e9gralement de valeurs <em>NA<\/em> logiques, \u00e9chouant syst\u00e9matiquement \u00e0 isoler les \u00e9l\u00e9ments recherch\u00e9s. Cette r\u00e9action algorithmique n&rsquo;est point une anomalie, mais d\u00e9coule directement de l&rsquo;application scrupuleuse des axiomes de la logique de Kleene \u00e0 trois \u00e9tats : vrai, faux et inconnu.<\/p>\n<p>En effet, lorsqu&rsquo;on interroge la machine pour savoir si la valeur contenue dans une case vectorielle est identique \u00e0 une entit\u00e9 ind\u00e9finie, la r\u00e9ponse formelle ne saurait \u00eatre affirmative ou n\u00e9gative : la comparaison d&rsquo;une valeur inconnue avec une autre valeur inconnue produit conceptuellement une ind\u00e9termination absolue. L&rsquo;\u00e9galit\u00e9 ne peut \u00eatre prouv\u00e9e, pas plus que la non-\u00e9galit\u00e9 ne peut \u00eatre d\u00e9montr\u00e9e. Ainsi, l&rsquo;\u00e9valuation de <em>NA == NA<\/em> ne donne point <em>TRUE<\/em>, mais rigoureusement <em>NA<\/em>. De surcro\u00eet, le comportement logique conditionnel d&rsquo;une instruction conditionnelle telle que <em>if (data[1] == NA)<\/em> g\u00e9n\u00e8re une erreur bloquante fatale du syst\u00e8me d&rsquo;ex\u00e9cution : <em>missing value where TRUE\/FALSE needed<\/em>.<\/p>\n<p>Pour r\u00e9soudre cette \u00e9quation et permettre une d\u00e9tection binaire et d\u00e9terministe de la vacuit\u00e9, R impl\u00e9mente une fonction primitive intrins\u00e8que d\u00e9nomm\u00e9e <em>is.na()<\/em>. Cette sous-routine, programm\u00e9e directement au c\u0153ur du runtime en langage C pour maximiser ses performances, interroge directement les bits de poids fort du registre de chaque cellule vectorielle sans solliciter l&rsquo;op\u00e9rateur d&rsquo;\u00e9galit\u00e9 math\u00e9matique. La primitive <em>is.na()<\/em> renvoie un vecteur bool\u00e9en de dimension rigoureusement identique \u00e0 celle du vecteur pass\u00e9 en argument d&rsquo;entr\u00e9e. Chaque \u00e9l\u00e9ment de ce vecteur r\u00e9sultant prend la valeur <em>TRUE<\/em> si la case correspondante h\u00e9berge un <em>NA<\/em> (ou un <em>NaN<\/em>), et la valeur <em>FALSE<\/em> dans le cas contraire. C&rsquo;est ce vecteur bool\u00e9en, agissant comme un calque binaire, qui constitue la clef de vo\u00fbte de toutes les op\u00e9rations de masquage logique et d&rsquo;extraction indicielle au sein du langage.<\/p>\n<h2>3. M\u00e9thode 1 : Filtrage vectoriel par indexation logique avec is.na()<\/h2>\n<h3>3.1 Principe de l&rsquo;extraction par masquage logique<\/h3>\n<p>La premi\u00e8re m\u00e9thode, universally reconnue pour son expressivit\u00e9 idiomatique et son respect absolu du paradigme vectoriel de R, repose sur la technique du sous-ensemble par indexation logique, couramment qualifi\u00e9e de masquage bool\u00e9en. Le processus intellectuel et op\u00e9rationnel de cette approche se d\u00e9compose en trois phases disjointes mais cons\u00e9cutives : la d\u00e9tection binaire des motifs manquants, la n\u00e9gation logique de ce masque, et enfin l&rsquo;application de l&rsquo;op\u00e9rateur d&rsquo;extraction structurelle aux coordonn\u00e9es du vecteur d&rsquo;origine.<\/p>\n<p>Dans un premier temps, l&rsquo;invocation de <em>is.na(data)<\/em> projette la structure de donn\u00e9es dans un espace bool\u00e9en, identifiant de mani\u00e8re exhaustive l&#8217;emplacement de chaque cellule d\u00e9ficiente. Dans la mesure o\u00f9 l&rsquo;objectif analytique consiste non pas \u00e0 conserver les valeurs manquantes, mais au contraire \u00e0 retenir exclusivement les mesures empiriques valides, l&rsquo;analyste doit inverser ce vecteur logique au moyen de l&rsquo;op\u00e9rateur unaire de n\u00e9gation bool\u00e9enne, mat\u00e9rialis\u00e9 par le point d&rsquo;exclamation <em>!<\/em>. L&rsquo;expression <em>!is.na(data)<\/em> produit ainsi un vecteur logique o\u00f9 les \u00e9l\u00e9ments valides sont associ\u00e9s \u00e0 la valeur <em>TRUE<\/em> et les \u00e9l\u00e9ments alt\u00e9r\u00e9s ou absents sont cod\u00e9s par <em>FALSE<\/em>.<\/p>\n<p>Dans un troisi\u00e8me temps intervient l&rsquo;op\u00e9rateur d&rsquo;indexation vectorielle canonique mat\u00e9rialis\u00e9 par les crochets simples <em>[]<\/em>. Au sein du syst\u00e8me d&rsquo;ex\u00e9cution de R, l&rsquo;op\u00e9rateur d&rsquo;indexation appliqu\u00e9 conjointement \u00e0 un argument bool\u00e9en de m\u00eame longueur que le vecteur cible filtre s\u00e9lectivement les adresses m\u00e9moire des \u00e9l\u00e9ments. Tout \u00e9l\u00e9ment co\u00efncidant avec la coordonn\u00e9e d&rsquo;un drapeau bool\u00e9en <em>TRUE<\/em> est conserv\u00e9 et dupliqu\u00e9 dans un nouveau segment contigu de m\u00e9moire vive, tandis que chaque coordonn\u00e9e associ\u00e9e \u00e0 la valeur <em>FALSE<\/em> est silencieusement ignor\u00e9e lors de la recopie. Ce m\u00e9canisme garantit une s\u00e9lection d\u00e9terministe et directe, sans recourir \u00e0 aucune structure it\u00e9rative explicite telle qu&rsquo;une boucle <em>for<\/em> ou <em>while<\/em>.<\/p>\n<h3>3.2 Syntaxe formelle et impl\u00e9mentation pas \u00e0 pas<\/h3>\n<p>Pour illustrer la mise en \u0153uvre de cette m\u00e9thode fondamentale, consid\u00e9rons la construction d&rsquo;un vecteur num\u00e9rique synth\u00e9tique repr\u00e9sentant des mesures physiologiques, au sein duquel s&rsquo;intercalent des observations isol\u00e9es et des s\u00e9quences contigu\u00ebs de valeurs absentes. Ce vecteur d&rsquo;\u00e9valuation peut \u00eatre formalis\u00e9 comme suit au moyen de la primitive de concat\u00e9nation : un vecteur contenant successivement les r\u00e9els 12.4, 15.8, la valeur manquante <em>NA<\/em>, le r\u00e9el 18.2, deux valeurs <em>NA<\/em> cons\u00e9cutives, et le r\u00e9el 21.0. \u00c0 ce stade, la longueur intrins\u00e8que du vecteur, v\u00e9rifiable au moyen de la fonction native <em>length(data)<\/em>, \u00e9quivaut exactement \u00e0 sept unit\u00e9s d&rsquo;allocation.<\/p>\n<p>L&rsquo;assainissement durable de cette structure de donn\u00e9es s&rsquo;obtient par la d\u00e9claration explicite de l&rsquo;assignation de filtrage : <em>data_purified &lt;- data[!is.na(data)]<\/em>. Dans cette instruction, R \u00e9value de prime abord le terme log\u00e9 entre crochets, g\u00e9n\u00e9rant un vecteur bool\u00e9en interm\u00e9diaire de sept positions. Ce masque pr\u00e9sente l&rsquo;agencement logique suivant : <em>c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE)<\/em>. Lorsque l&rsquo;op\u00e9rateur d&rsquo;extraction \u00e9value cette expression contre le vecteur initial, seules les adresses 1, 2, 4 et 7 sont extraites et copi\u00e9es vers le pointeur <em>data_purified<\/em>.<\/p>\n<p>Si l&rsquo;analyste examine d\u00e9sormais l&rsquo;objet r\u00e9sultant via l&rsquo;interrogateur <em>length(data_purified)<\/em>, la machine atteste formellement que le conteneur ne d\u00e9nombre plus que quatre \u00e9l\u00e9ments d&rsquo;observation. L&rsquo;affichage du vecteur purifi\u00e9 d\u00e9montre une suppression radicale et propre de toute composante non disponible, les r\u00e9els contigus occupant d\u00e9sormais des positions indicielles r\u00e9index\u00e9es de 1 \u00e0 4. Cette contraction dimensionnelle est d\u00e9finitive pour l&rsquo;objet nouvellement assign\u00e9, garantissant que toute manipulation math\u00e9matique subs\u00e9quente s&rsquo;op\u00e9rera sur un sous-ensemble parfaitement dense et exempt de corruption.<\/p>\n<h3>3.3 Avantages structurels de la r\u00e9assignation directe<\/h3>\n<p>L&rsquo;un des avantages structurels majeurs du filtrage vectoriel par n\u00e9gation logique r\u00e9side dans son aptitude \u00e0 modifier de mani\u00e8re persistante l&rsquo;espace d&rsquo;adressage de l&rsquo;objet si l&rsquo;on proc\u00e8de \u00e0 une r\u00e9assignation directe sur la variable d&rsquo;origine au moyen de la syntaxe <em>data &lt;- data[!is.na(data)]<\/em>. Cette r\u00e9\u00e9criture contr\u00f4l\u00e9e \u00e9crase la r\u00e9f\u00e9rence de l&rsquo;ancien conteneur pour allouer un espace m\u00e9moire optimis\u00e9, r\u00e9duisant imm\u00e9diatement la charge r\u00e9sidente de la session de travail R d\u00e8s lors que l&rsquo;ancien bloc m\u00e9moire est r\u00e9cup\u00e9r\u00e9 par le ramasse-miettes (<em>garbage collector<\/em>).<\/p>\n<p>Par ailleurs, cette approche pr\u00e9serve de fa\u00e7on immacul\u00e9e l&rsquo;int\u00e9grit\u00e9 du type atomique originel du vecteur ainsi que l&rsquo;ensemble de ses attributs primaires, sans lui adjoindre de m\u00e9tadonn\u00e9es superflues ou perturbatrices. Le vecteur ainsi \u00e9lagu\u00e9 demeure un vecteur atomique standard au sens le plus pur de l&rsquo;architecture S. Il n&rsquo;h\u00e9rite d&rsquo;aucune classe suppl\u00e9mentaire (telle qu&rsquo;une classe S3 d\u00e9di\u00e9e \u00e0 l&rsquo;omission) et ne conserve aucun r\u00e9sidu structurel susceptible de fausser des calculs bas niveau ou de perturber des interfaces de programmation applicatives (API) connect\u00e9es via le m\u00e9canisme <em>.Call<\/em> vers des biblioth\u00e8ques C++ compil\u00e9es.<\/p>\n<p>Enfin, le masquage par <em>[!is.na()]<\/em> offre une interop\u00e9rabilit\u00e9 et une universalit\u00e9 absolues. Il fonctionne sans la moindre alt\u00e9ration s\u00e9mantique sur tous les types fondamentaux de la hi\u00e9rarchie R : vecteurs d&rsquo;entiers, de nombres \u00e0 virgule flottante double pr\u00e9cision, de cha\u00eenes de caract\u00e8res, de valeurs bool\u00e9ennes ou de grandeurs complexes. Cette neutralit\u00e9 paradigmatique fait de l&rsquo;indexation bool\u00e9enne la m\u00e9thode de r\u00e9f\u00e9rence absolue pr\u00e9conis\u00e9e dans le d\u00e9veloppement de progiciels robustes et le code d&rsquo;infrastructure logicielle au sein de l&rsquo;\u00e9cosyst\u00e8me <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/\">Comprehensive R Archive Network (CRAN)<\/a>.<\/p>\n<h2>4. D\u00e9composition technique et analyse de performance de la M\u00e9thode 1<\/h2>\n<h3>4.1 Complexit\u00e9 algorithmique et gestion de la m\u00e9moire vive<\/h3>\n<p>D&rsquo;un point de vue algorithmicien, l&rsquo;op\u00e9ration de filtrage par masquage bool\u00e9en pr\u00e9sente une complexit\u00e9 temporelle asymptotique strictement lin\u00e9aire, not\u00e9e formellement <em>O(N)<\/em>, o\u00f9 <em>N<\/em> repr\u00e9sente le nombre cardinal total d&rsquo;\u00e9l\u00e9ments log\u00e9s dans le vecteur d&rsquo;origine. Lors de l&rsquo;ex\u00e9cution, l&rsquo;interpr\u00e9teur R doit parcourir une premi\u00e8re fois l&rsquo;ensemble des adresses m\u00e9moires s\u00e9quentielles pour construire le vecteur de bits \u00e9manant de <em>is.na()<\/em>, appliquer l&rsquo;inversion unaire <em>!<\/em> \u00e0 chaque cellule bool\u00e9enne, puis ex\u00e9cuter un second balayage s\u00e9quentiel pour identifier les occurrences associ\u00e9es \u00e0 la valeur <em>TRUE<\/em> et allouer le bloc de m\u00e9moire r\u00e9cepteur destin\u00e9 \u00e0 h\u00e9berger les \u00e9l\u00e9ments filtr\u00e9s.<\/p>\n<p>N\u00e9anmoins, la gestion de la m\u00e9moire vive induite par cette approche m\u00e9rite une attention minutieuse, en particulier dans les sc\u00e9narios de traitement massif de donn\u00e9es (<em>Big Data Analytics<\/em>) impliquant des vecteurs de dizaines ou de centaines de millions d&rsquo;\u00e9l\u00e9ments. R applique par essence un principe de gestion de la m\u00e9moire d\u00e9sign\u00e9 sous l&rsquo;appellation de copie lors de la modification (<a rel=\"noopener noreferrer\" href=\"https:\/\/adv-r.hadley.nz\/names-values.html#copy-on-modify\">copy-on-modify<\/a>). Lorsque l&rsquo;expression <em>!is.na(data)<\/em> est sollicit\u00e9e, R instancie temporairement un vecteur logique auxiliaire de longueur <em>N<\/em>. \u00c9tant donn\u00e9 que dans l&rsquo;architecture interne de R, un bool\u00e9en occupe usuellement 4 octets en m\u00e9moire (encod\u00e9 sous la forme d&rsquo;un entier C pour g\u00e9rer l&rsquo;\u00e9tat tri-valu\u00e9), la cr\u00e9ation de ce masque transitoire g\u00e9n\u00e8re une empreinte m\u00e9moire non n\u00e9gligeable.<\/p>\n<p>Pour des vecteurs extr\u00eamement volumineux, cette allocation temporaire peut saturer l&rsquo;espace adressable ou provoquer des cycles pr\u00e9matur\u00e9s et co\u00fbteux d&rsquo;\u00e9viction par le ramasse-miettes. D\u00e8s lors, bien que l&rsquo;ex\u00e9cution temporelle demeure exceptionnellement v\u00e9loce gr\u00e2ce \u00e0 l&rsquo;impl\u00e9mentation vectoris\u00e9e native compil\u00e9e en langage C, la surcharge ponctuelle en m\u00e9moire tampon exige de l&rsquo;ing\u00e9nieur de donn\u00e9es une vigilance aigu\u00eb, imposant de lib\u00e9rer explicitement les structures interm\u00e9diaires massives ou de dimensionner ad\u00e9quatement la m\u00e9moire vive allou\u00e9e au processus R sous-jacent.<\/p>\n<h3>4.2 Variantes avanc\u00e9es du filtrage bool\u00e9en<\/h3>\n<p>La puissance du paradigme d&rsquo;indexation bool\u00e9enne r\u00e9side \u00e9galement dans son extr\u00eame plasticit\u00e9 syntactique. Contrairement \u00e0 des fonctions rigides d\u00e9di\u00e9es exclusivement \u00e0 l&rsquo;omission des <em>NA<\/em>, l&rsquo;op\u00e9rateur d&rsquo;extraction crochets autorise la composition arbitraire de conditions logiques multiples par l&rsquo;interm\u00e9diaire de l&rsquo;op\u00e9rateur conjonctif binaire vectoris\u00e9 <em>&amp;<\/em> ou de l&rsquo;op\u00e9rateur disjonctif <em>|<\/em>. Cette modularit\u00e9 permet d&rsquo;op\u00e9rer un nettoyage multidimensionnel en une unique passe d&rsquo;instruction atomique.<\/p>\n<p>Il est ainsi particuli\u00e8rement fr\u00e9quent de devoir expurger un vecteur non seulement de ses composantes manquantes, mais simultan\u00e9ment de valeurs aberrantes, aberrantes physiologiquement ou techniquement impossibles g\u00e9n\u00e9r\u00e9es par un dysfonctionnement de sonde. Par exemple, un analyste peut formuler l&rsquo;instruction compos\u00e9e suivante : <em>clean_data &lt;- data[!is.na(data) &amp; data &gt;= 0 &amp; data &lt;= 100]<\/em>. Dans cette configuration, R \u00e9value de concert l&rsquo;absence de lacune et l&rsquo;appartenance de la mesure empirique \u00e0 l&rsquo;intervalle d&rsquo;admissibilit\u00e9 [0, 100]. Il est imp\u00e9ratif d&rsquo;utiliser ici l&rsquo;op\u00e9rateur logique vectoris\u00e9 <em>&amp;<\/em> et non l&rsquo;op\u00e9rateur scalaire \u00e0 court-circuit <em>&amp;&amp;<\/em>, ce dernier n&rsquo;\u00e9valuant que le premier \u00e9l\u00e9ment atomique du vecteur pour orienter les structures de contr\u00f4le de flux conditionnel.<\/p>\n<p>Une alternative classique de l&rsquo;indexation bool\u00e9enne consiste en l&rsquo;utilisation conjointe de la fonction <em>which()<\/em>, formul\u00e9e selon la syntaxe : <em>clean_data &lt;- data[which(!is.na(data))]<\/em>. La primitive <em>which()<\/em> convertit le vecteur bool\u00e9en issu du test en un vecteur d&rsquo;entiers repr\u00e9sentant explicitement les positions g\u00e9om\u00e9triques ordinales des valeurs vraies. Bien que cette approche pr\u00e9sente un int\u00e9r\u00eat didactique pour auditer les num\u00e9ros d&rsquo;indices retenus, elle s&rsquo;av\u00e8re computationnellement moins efficiente que le filtrage bool\u00e9en pur. Elle ajoute en effet une \u00e9tape interm\u00e9diaire superflue de transformation matricielle et d&rsquo;allocation d&rsquo;un vecteur d&rsquo;entiers 32 bits, induisant une d\u00e9gradation mesurable des temps de calcul sur les volum\u00e9tries critiques sans conf\u00e9rer de plus-value fonctionnelle directe sur la suppression des lacunes.<\/p>\n<h2>5. M\u00e9thode 2 : Neutralisation contextuelle des NA via l&rsquo;argument na.rm<\/h2>\n<h3>5.1 Fondements de l&rsquo;argument na.rm dans les primitives statistiques<\/h3>\n<p>La seconde m\u00e9thode d&rsquo;assainissement se d\u00e9marque radicalement de la pr\u00e9c\u00e9dente par son refus d&rsquo;alt\u00e9rer ou de contracter la structure du vecteur initial. Plut\u00f4t que de d\u00e9truire physiquement les cellules corrompues au sein de l&rsquo;environnement de travail global, cette d\u00e9marche pr\u00e9conise la neutralisation op\u00e9rationnelle et contextuelle de l&rsquo;absence d&rsquo;information au moment pr\u00e9cis o\u00f9 le calcul statistique est sollicit\u00e9. Cette fonctionnalit\u00e9 est encapsul\u00e9e au sein d&rsquo;un param\u00e8tre formel omnipr\u00e9sent dans la distribution standard des fonctions math\u00e9matiques de base de R : l&rsquo;argument formel <em>na.rm<\/em>.<\/p>\n<p>D&rsquo;un point de vue \u00e9tymologique et mn\u00e9monique, le vocable <em>na.rm<\/em> est l&rsquo;acronyme contract\u00e9 de la directive anglophone <em>NA remove<\/em> (suppression des NA). Configur\u00e9 par d\u00e9faut sur la valeur logique conservative <em>FALSE<\/em> au sein des fonctions primitives, ce param\u00e8tre impose au compilateur interne de pr\u00e9server l&rsquo;inconnue et de retourner syst\u00e9matiquement <em>NA<\/em> en cas de contamination. D\u00e8s lors que l&rsquo;utilisateur modifie express\u00e9ment cet \u00e9tat de fait en d\u00e9clarant l&rsquo;argument formel <em>na.rm = TRUE<\/em>, le comportement algorithmique sous-jacent subit une bifurcation m\u00e9thodologique fondamentale.<\/p>\n<p>L&rsquo;exclusion des observations manquantes est alors d\u00e9l\u00e9gu\u00e9e directement au moteur bas niveau de la fonction, quasi syst\u00e9matiquement impl\u00e9ment\u00e9 en langage C ou Fortran. Au lieu de mat\u00e9rialiser un vecteur interm\u00e9diaire expurg\u00e9 en m\u00e9moire de travail, la boucle de calcul sous-jacente inspecte chaque adresse m\u00e9moire et applique un saut conditionnel (<em>instruction branch jump<\/em>) lorsqu&rsquo;un motif de bits de type <em>NA<\/em> est intercept\u00e9, continuant l&rsquo;accumulation des grandeurs physiques sans interrompre la routine. Le vecteur source d&rsquo;origine demeure rigoureusement intact, pr\u00e9servant son empreinte spatiale et son ordonnancement indiciel au sein de la table des symboles de la session R.<\/p>\n<h3>5.2 Cas d&rsquo;usage sur les m\u00e9triques de tendance centrale et de dispersion<\/h3>\n<p>L&rsquo;utilisation de l&rsquo;argument formel <em>na.rm = TRUE<\/em> trouve son th\u00e9\u00e2tre d&rsquo;application privil\u00e9gi\u00e9 au sein des m\u00e9triques usuelles d\u00e9crivant la tendance centrale, l&rsquo;\u00e9talement et la dispersion d&rsquo;une distribution statistique. Lors de la quantification d&rsquo;une esp\u00e9rance empirique, l&rsquo;ex\u00e9cution directe de l&rsquo;instruction <em>mean(data, na.rm = TRUE)<\/em> ordonne \u00e0 la routine interne d&rsquo;accumuler exclusivement les scalaires quantifiables tout en divisant la somme cumul\u00e9e par le nombre effectif d&rsquo;observations non manquantes collect\u00e9es, neutralisant l&rsquo;apparition de l&rsquo;ind\u00e9termination finale.<\/p>\n<p>Il en va rigoureusement de m\u00eame pour l&rsquo;extraction des minima et maxima empiriques au moyen des fonctions primitives <em>min()<\/em> et <em>max()<\/em>. L&rsquo;adjonction syst\u00e9matique de la directive <em>na.rm = TRUE<\/em> contraint l&rsquo;algorithme \u00e0 rechercher les valeurs extr\u00eames uniquement parmi le sous-ensemble ordonnable des grandeurs tangibles. De fa\u00e7on analogue, les estimations fondamentales de la dispersion que sont la variance d&rsquo;\u00e9chantillon et l&rsquo;\u00e9cart-type requi\u00e8rent imp\u00e9rativement ce traitement : les fonctions d&rsquo;ordre sup\u00e9rieur <em>var(data, na.rm = TRUE)<\/em> et <em>sd(data, na.rm = TRUE)<\/em> calculent les sommes des \u00e9carts quadratiques \u00e0 la moyenne empirique en ajustant automatiquement le d\u00e9nominateur de Bessel aux seules observations valid\u00e9es.<\/p>\n<p>Au-del\u00e0 de ces m\u00e9triques \u00e9l\u00e9mentaires, cette strat\u00e9gie s&rsquo;applique avec une efficience \u00e9gale aux calculs des quantiles d&rsquo;ordre <em>p<\/em> au moyen de la fonction param\u00e9trique <em>quantile()<\/em>, ainsi qu&rsquo;aux tests d&rsquo;ad\u00e9quation ou d&rsquo;inf\u00e9rence bivari\u00e9e de base. En \u00e9vitant la duplication mat\u00e9rielle d&rsquo;un conteneur vectoriel \u00e9pur\u00e9, l&rsquo;analyste simplifie consid\u00e9rablement la syntaxe de ses expressions arithm\u00e9tiques tout en b\u00e9n\u00e9ficiant de la c\u00e9l\u00e9rit\u00e9 absolue des impl\u00e9mentations compil\u00e9es de bas niveau int\u00e9gr\u00e9es nativement \u00e0 la distribution du logiciel.<\/p>\n<h3>5.3 Divergence entre suppression permanente et exclusion temporaire<\/h3>\n<p>La distinction conceptuelle entre l&rsquo;\u00e9lagage permanent d&rsquo;un objet en m\u00e9moire et son exclusion temporaire \u00e0 l&rsquo;int\u00e9rieur d&rsquo;une fonction analytique constitue une ligne de d\u00e9marcation architecturale de premier ordre. Dans le cadre d&rsquo;un pipeline de manipulation de donn\u00e9es sophistiqu\u00e9, un vecteur atomique ne r\u00e9side que rarement sous une forme d\u00e9connect\u00e9e et solitaire ; il coexiste g\u00e9n\u00e9ralement au sein d&rsquo;un \u00e9cosyst\u00e8me d&rsquo;objets coordonn\u00e9s, tels que d&rsquo;autres vecteurs repr\u00e9sentant des variables covariables, des identifiants d&rsquo;unit\u00e9s statistiques ou des s\u00e9ries chronologiques r\u00e9guli\u00e8res.<\/p>\n<p>Si l&rsquo;analyste proc\u00e8de \u00e0 une r\u00e9duction permanente d&rsquo;un vecteur isol\u00e9 via l&rsquo;indexation destructive <em>data &lt;- data[!is.na(data)]<\/em>, la longueur vectorielle de cet objet s&rsquo;en trouve irr\u00e9versiblement contract\u00e9e. Si ce vecteur doit ult\u00e9rieurement \u00eatre corr\u00e9l\u00e9 \u00e0 un second vecteur mesur\u00e9 sur les m\u00eames unit\u00e9s exp\u00e9rimentales, une discordance de dimensionnalit\u00e9 insoluble surviendra imm\u00e9diatement, d\u00e9clenchant l&rsquo;erreur fatale de R signalant des longueurs d&rsquo;arguments incompatibles. La suppression destructive d&rsquo;un <em>NA<\/em> alt\u00e8re la synchronisation positionnelle entre les coordonn\u00e9es g\u00e9om\u00e9triques des diff\u00e9rentes variables analys\u00e9es.<\/p>\n<p>\u00c0 l&rsquo;inverse, le recours \u00e0 l&rsquo;argument <em>na.rm = TRUE<\/em> mat\u00e9rialise une \u00e9valuation ponctuelle, non invasive et contextuelle. L&rsquo;int\u00e9grit\u00e9 de l&rsquo;alignement indiciel est scrupuleusement pr\u00e9serv\u00e9e au niveau de l&rsquo;objet m\u00e8re. La variable conserve son empreinte de mesure globale, ses correspondances d&rsquo;indexation ligne par ligne avec les autres dimensions du probl\u00e8me, tout en accordant aux op\u00e9rations d&rsquo;agr\u00e9gation locales la facult\u00e9 de d\u00e9roger momentan\u00e9ment \u00e0 l&rsquo;omnipr\u00e9sence du vide statistique. L&rsquo;\u00e9vitement des effets de bord collat\u00e9raux sur les segments ult\u00e9rieurs du script d&rsquo;analyse constitue ainsi le fondement m\u00e9thodologique militant en faveur de cette seconde approche.<\/p>\n<h2>6. Analyse statistique et pi\u00e8ges math\u00e9matiques li\u00e9s \u00e0 l&rsquo;usage de na.rm<\/h2>\n<h3>6.1 Impacts sur les degr\u00e9s de libert\u00e9 et la taille d&rsquo;\u00e9chantillon<\/h3>\n<p>L&rsquo;aisance syntaxique et l&rsquo;imm\u00e9diatet\u00e9 d&rsquo;usage de l&rsquo;argument formel <em>na.rm = TRUE<\/em> tendent fr\u00e9quemment \u00e0 occulter ses cons\u00e9quences m\u00e9thodologiques les plus pernicieuses sur le plan de la th\u00e9orie de l&rsquo;\u00e9chantillonnage et de l&rsquo;<a rel=\"noopener noreferrer\" href=\"https:\/\/global.oup.com\/academic\/product\/statistical-analysis-with-missing-data-9780470526798\">inf\u00e9rence statistique en pr\u00e9sence de donn\u00e9es manquantes<\/a>. Lorsqu&rsquo;une routine de calcul statistique exclut silencieusement les valeurs <em>NA<\/em> d&rsquo;une m\u00e9trique, la taille d&rsquo;\u00e9chantillon effective, conventionnellement d\u00e9not\u00e9e <em>N<\/em>, subit une diminution imperceptible pour le chercheur qui n&rsquo;inspecterait point explicitement les attributs dimensionnels de ses donn\u00e9es.<\/p>\n<p>Cette r\u00e9duction subreptice de la puissance statistique de l&rsquo;\u00e9chantillon influe directement sur le calcul des erreurs-types associ\u00e9es aux estimateurs ponctuels. Dans le cas de la moyenne empirique, l&rsquo;erreur-type th\u00e9orique est d\u00e9finie par le quotient de l&rsquo;\u00e9cart-type de la population par la racine carr\u00e9e de la taille de l&rsquo;\u00e9chantillon. Si l&rsquo;analyste omet de consigner le nombre exact d&rsquo;observations valid\u00e9es ayant contribu\u00e9 \u00e0 l&rsquo;estimation, les intervalles de confiance construits ult\u00e9rieurement risquent d&rsquo;\u00eatre artificiellement r\u00e9tr\u00e9cis ou fauss\u00e9s, conduisant \u00e0 des conclusions inf\u00e9rentielles erron\u00e9es et \u00e0 un accroissement du risque d&rsquo;erreur de premi\u00e8re esp\u00e8ce (rejet intempestif de l&rsquo;hypoth\u00e8se nulle).<\/p>\n<p>En outre, l&rsquo;application aveugle de l&rsquo;omission contextuelle repose sur le postulat implicite et hautement restrictif que le m\u00e9canisme sous-jacent de g\u00e9n\u00e9ration des valeurs manquantes ob\u00e9it \u00e0 une distribution compl\u00e8tement al\u00e9atoire, concept formalis\u00e9 par Donald Rubin sous le vocable de <em>Missing Completely at Random<\/em> (MCAR). Si les lacunes rel\u00e8vent en r\u00e9alit\u00e9 d&rsquo;un m\u00e9canisme non al\u00e9atoire (<em>Missing Not at Random<\/em> ou MNAR) \u2014 par exemple, si les individus pr\u00e9sentant les revenus les plus \u00e9lev\u00e9s ou les sympt\u00f4mes cliniques les plus s\u00e9v\u00e8res ont syst\u00e9matiquement refus\u00e9 de r\u00e9pondre \u2014, l&rsquo;exclusion op\u00e9r\u00e9e par <em>na.rm = TRUE<\/em> induit un biais de s\u00e9lection massif. Les estimations statistiques ne refl\u00e8tent plus la population d&rsquo;int\u00e9r\u00eat originelle, mais un sous-\u00e9chantillon auto-s\u00e9lectionn\u00e9 non repr\u00e9sentatif, invalidant la port\u00e9e \u00e9pist\u00e9mologique de l&rsquo;analyse.<\/p>\n<h3>6.2 Gestion des cas limites et retours d&rsquo;erreurs inattendus<\/h3>\n<p>L&rsquo;utilisation de l&rsquo;argument <em>na.rm = TRUE<\/em> peut \u00e9galement g\u00e9n\u00e9rer des comportements algorithmiques d\u00e9concertants lorsque l&rsquo;analyste est confront\u00e9 \u00e0 des cas limites pathologiques, en particulier lorsqu&rsquo;un vecteur est int\u00e9gralement constitu\u00e9 d&rsquo;\u00e9l\u00e9ments manquants ou s&rsquo;av\u00e8re totalement vide suite \u00e0 une \u00e9tape de filtrage pr\u00e9alable. Dans de telles configurations, les postulats math\u00e9matiques des fonctions primitives sont mis \u00e0 rude \u00e9preuve par l&rsquo;absence d&rsquo;entit\u00e9s quantifiables.<\/p>\n<p>Le cas des fonctions d&rsquo;extr\u00eames <em>min()<\/em> et <em>max()<\/em> appliqu\u00e9es \u00e0 un vecteur ne contenant que des <em>NA<\/em> exemplifie parfaitement cette singularit\u00e9. L&rsquo;ex\u00e9cution de la commande <em>max(c(NA, NA), na.rm = TRUE)<\/em> d\u00e9clenche un message d&rsquo;avertissement formel (<em>warning<\/em>) indiquant que tous les arguments pass\u00e9s \u00e0 la fonction sont manquants, et retourne de fa\u00e7on surprenante la valeur sp\u00e9ciale <em>-Inf<\/em> (moins l&rsquo;infini). R\u00e9ciproquement, la fonction <em>min()<\/em> soumise aux m\u00eames conditions retournera la valeur <em>Inf<\/em> (l&rsquo;infini positif). Ce comportement, bien que rigoureux du point de vue de la th\u00e9orie des treillis en math\u00e9matiques discr\u00e8tes (l&rsquo;\u00e9l\u00e9ment neutre de la recherche d&rsquo;un maximum sur un ensemble vide \u00e9tant le plus petit \u00e9l\u00e9ment concevable dans l&rsquo;espace compactifi\u00e9 des r\u00e9els), peut corrompre irr\u00e9m\u00e9diablement des calculs arithm\u00e9tiques ult\u00e9rieurs qui ing\u00e9reraient ces grandeurs infinies sans notification d&rsquo;erreur bloquante.<\/p>\n<p>De m\u00eame, l&rsquo;\u00e9valuation de <em>mean(c(NA, NA), na.rm = TRUE)<\/em> produit sans avertissement le r\u00e9sultat <em>NaN<\/em>, traduisant l&rsquo;ind\u00e9termination arithm\u00e9tique d&rsquo;une division de z\u00e9ro par z\u00e9ro (la somme des \u00e9l\u00e9ments \u00e9tant nulle et la taille effective \u00e9tant de z\u00e9ro). Face \u00e0 ces risques de d\u00e9rive silencieuse, la r\u00e9daction d&rsquo;un code robuste en environnement de production statistique requiert la mise en place syst\u00e9matique de gardes-fous et de tests d&rsquo;assertion pr\u00e9alables. Il est ainsi hautement recommand\u00e9 de v\u00e9rifier formellement la condition d&rsquo;admissibilit\u00e9 au moyen d&rsquo;expressions telles que <em>any(!is.na(data))<\/em> ou <em>sum(!is.na(data)) &gt; 0<\/em> avant de solliciter aveugl\u00e9ment les fonctions d&rsquo;agr\u00e9gation statistique param\u00e9tr\u00e9es avec <em>na.rm = TRUE<\/em>.<\/p>\n<h2>7. M\u00e9thode 3 : \u00c9limination par fonction g\u00e9n\u00e9rique avec na.omit()<\/h2>\n<h3>7.1 M\u00e9canisme de la fonction na.omit appliqu\u00e9e aux vecteurs<\/h3>\n<p>La troisi\u00e8me approche fondamentale proc\u00e8de d&rsquo;une philosophie interm\u00e9diaire alliant la concision d&rsquo;un appel fonctionnel explicite et la pr\u00e9servation d&rsquo;une tra\u00e7abilit\u00e9 documentaire rigoureuse des suppressions op\u00e9r\u00e9es : il s&rsquo;agit de l&#8217;emploi de la fonction g\u00e9n\u00e9rique <em>na.omit()<\/em>. Issue du socle historique du package de base <em>stats<\/em>, cette fonction est con\u00e7ue pour s&rsquo;interfacer avec \u00e9l\u00e9gance sur une vaste typologie d&rsquo;objets, englobant aussi bien des matrices multidimensionnelles et des tables de donn\u00e9es de type <em>data.frame<\/em> que les vecteurs atomiques unidimensionnels.<\/p>\n<p>Lorsqu&rsquo;elle est appliqu\u00e9e \u00e0 un vecteur atomique, la fonction <em>na.omit()<\/em> ex\u00e9cute un \u00e9lagage chirurgical des composantes manquantes en proc\u00e9dant en interne \u00e0 un balayage indiciel similaire \u00e0 celui op\u00e9r\u00e9 par le masquage logique. Elle instancie et retourne un nouveau sous-vecteur atomique d\u00e9barrass\u00e9 de toute valeur non disponible. La longueur intrins\u00e8que de ce vecteur retourn\u00e9 est donc ajust\u00e9e \u00e0 la baisse, refl\u00e9tant le cardinal exact des unit\u00e9s d&rsquo;observation compl\u00e8tes.<\/p>\n<p>N\u00e9anmoins, la divergence essentielle entre <em>na.omit()<\/em> et le simple filtrage bool\u00e9en <em>data[!is.na(data)]<\/em> r\u00e9side dans la g\u00e9n\u00e9ration et l&rsquo;adjonction syst\u00e9matique d&rsquo;attributs de classe \u00e0 l&rsquo;objet r\u00e9sultant. L&rsquo;objet \u00e9manant de <em>na.omit()<\/em> ne se limite pas \u00e0 un vecteur de scalaires ; il se voit greffer un attribut sp\u00e9cialis\u00e9 nomm\u00e9 <em>na.action<\/em>, assign\u00e9 \u00e0 la sous-classe formelle de m\u00eame nom. Cet enrichissement structurel permet d&rsquo;utiliser directement le retour de <em>na.omit()<\/em> dans des expressions imbriqu\u00e9es telles que <em>mean(na.omit(data))<\/em> ou <em>max(na.omit(data))<\/em>, tout en autorisant les proc\u00e9dures de mod\u00e9lisation statistique avanc\u00e9es (telles que les r\u00e9gressions lin\u00e9aires formul\u00e9es via <em>lm()<\/em>) \u00e0 exploiter r\u00e9troactivement l&rsquo;historique des exclusions d&rsquo;observations.<\/p>\n<h3>7.2 Proc\u00e9dure d&rsquo;impl\u00e9mentation pratique<\/h3>\n<p>La mise en application concr\u00e8te de la fonction g\u00e9n\u00e9rique <em>na.omit()<\/em> s&rsquo;illustre par une concision syntaxique particuli\u00e8rement s\u00e9duisante pour l&rsquo;analyste. Prenons l&rsquo;exemple d&rsquo;un vecteur de mesures quantitatives nomm\u00e9 <em>mesures_brutes<\/em> comportant une alternance de scalaires r\u00e9els et d&rsquo;observations manquantes r\u00e9parties de mani\u00e8re stochastique. L&rsquo;instruction formelle d&rsquo;assainissement s&rsquo;articule par une simple assignation : <em>mesures_propres &lt;- na.omit(mesures_brutes)<\/em>.<\/p>\n<p>L&rsquo;affichage dans la console R de l&rsquo;objet <em>mesures_propres<\/em> r\u00e9v\u00e8le imm\u00e9diatement la dualit\u00e9 de sa constitution interne. Dans la portion principale du flux textuel, les \u00e9l\u00e9ments quantitatifs valides apparaissent s\u00e9quentiellement, ordonn\u00e9s sous la forme d&rsquo;un vecteur compact\u00e9. Toutefois, le syst\u00e8me adjoint imm\u00e9diatement sous les valeurs un pied de page m\u00e9tas\u00e9mantique indiquant explicitement la pr\u00e9sence de l&rsquo;attribut d&rsquo;omission, formul\u00e9 sous la modalit\u00e9 standard : <em>attr(,\u00a0\u00bbna.action\u00a0\u00bb)<\/em>, suivi de la liste exhaustive des positions ordinales d&rsquo;origine ayant fait l&rsquo;objet de l&rsquo;\u00e9viction, ainsi que de la mention formelle de la classe <em>class \u00ab\u00a0omit\u00a0\u00bb<\/em>.<\/p>\n<p>Cette approche trouve un champ d&rsquo;utilit\u00e9 majeur lorsqu&rsquo;il s&rsquo;agit d&rsquo;alimenter des fonctions statistiques ou des algorithmes issus de paquets sp\u00e9cialis\u00e9s tiers qui ne disposent point nativement du param\u00e8tre formel <em>na.rm<\/em>. De nombreux modules d&rsquo;apprentissage statistique ou de traitement de s\u00e9ries chronologiques acceptent exclusivement des conteneurs vectoriels denses sans impl\u00e9menter d&rsquo;argument d&rsquo;omission au sein de leurs interfaces. Dans ce contexte, l&rsquo;encapsulation directe de la variable par l&rsquo;appel <em>na.omit(mesures_brutes)<\/em> constitue une solution d&rsquo;ing\u00e9nierie logicielle particuli\u00e8rement \u00e9l\u00e9gante, conf\u00e9rant une immunit\u00e9 imm\u00e9diate contre les blocages d&rsquo;ex\u00e9cution tout en documentant la transformation subie par le vecteur.<\/p>\n<h2>8. Propri\u00e9t\u00e9s de la structure d&rsquo;objet issue de na.omit()<\/h2>\n<h3>8.1 Attributs sp\u00e9ciaux et classe na.action<\/h3>\n<p>La compr\u00e9hension approfondie des m\u00e9canismes internes de <em>na.omit()<\/em> exige une dissection minutieuse des m\u00e9tadonn\u00e9es inject\u00e9es au sein de l&rsquo;objet purifi\u00e9. Dans le mod\u00e8le d&rsquo;objets de R, tout vecteur atomique peut se voir associer une liste de paires attributaires au moyen du pointeur interne de m\u00e9tadonn\u00e9es. La fonction <em>na.omit()<\/em> tire parti de cette flexibilit\u00e9 pour archiver avec une pr\u00e9cision math\u00e9matique la topologie des donn\u00e9es \u00e9cart\u00e9es.<\/p>\n<p>L&rsquo;attribut baptis\u00e9 <em>na.action<\/em> est mat\u00e9rialis\u00e9 sous la forme d&rsquo;un vecteur d&rsquo;entiers pointant directement vers les num\u00e9ros d&rsquo;indices vectoriels d&rsquo;origine qui contenaient une valeur <em>NA<\/em>. Par exemple, si les troisi\u00e8me et cinqui\u00e8me \u00e9l\u00e9ments du vecteur d&rsquo;entr\u00e9e initial de taille dix ont \u00e9t\u00e9 purg\u00e9s, l&rsquo;attribut h\u00e9bergera le vecteur d&rsquo;entiers <em>c(3L, 5L)<\/em>. De surcro\u00eet, cet attribut est lui-m\u00eame pourvu de classes d&rsquo;objets S3 d\u00e9di\u00e9es, le d\u00e9clarant formellement comme appartenant \u00e0 la classe <em>\u00ab\u00a0omit\u00a0\u00bb<\/em>. L&rsquo;acc\u00e8s programmatique \u00e0 cette information d&rsquo;auditabilit\u00e9 s&rsquo;op\u00e8re de fa\u00e7on transparente via l&rsquo;instruction de bas niveau : <em>indices_rejetes &lt;- attr(mesures_propres, \u00ab\u00a0na.action\u00a0\u00bb)<\/em>.<\/p>\n<p>Cette tra\u00e7abilit\u00e9 absolue constitue un atout de tout premier ordre dans le cadre de protocoles d&rsquo;assurance qualit\u00e9 des donn\u00e9es et de science reproductible. Elle permet \u00e0 l&rsquo;investigateur de tracer r\u00e9trospectivement le profil d&rsquo;incompl\u00e9tude sans avoir \u00e0 maintenir manuellement un second vecteur d&rsquo;indexation. Cependant, cette richesse m\u00e9tas\u00e9mantique peut occasionnellement constituer un \u00e9cueil technique. Certaines fonctions vectorielles tr\u00e8s rigides, ou des fonctions math\u00e9matiques compil\u00e9es via le paquet <em>Rcpp<\/em> attendant un conteneur num\u00e9rique pur exempt de toute d\u00e9coration structurelle, peuvent manifester des comportements aberrants ou rejeter l&rsquo;objet en signalant une incompatibilit\u00e9 de type ou un refus d&rsquo;ing\u00e9rer un objet affubl\u00e9 d&rsquo;attributs de classe \u00e9trangers.<\/p>\n<h3>8.2 Nettoyage des attributs pour restaurer un vecteur pur<\/h3>\n<p>Lorsque les contraintes d&rsquo;interop\u00e9rabilit\u00e9 applicative exigent l&rsquo;\u00e9radication compl\u00e8te de ces m\u00e9tadonn\u00e9es d&rsquo;omission afin de restituer au vecteur son statut de vecteur atomique primitif strict, l&rsquo;analyste dispose de plusieurs proc\u00e9dures d&rsquo;assainissement structurel.<\/p>\n<p>La premi\u00e8re strat\u00e9gie, particuli\u00e8rement idiomatique, consiste \u00e0 contraindre le retour de l&rsquo;op\u00e9ration via la primitive de conversion g\u00e9n\u00e9rique <em>as.vector()<\/em>. L&rsquo;instruction s&rsquo;\u00e9nonce comme suit : <em>vecteur_pur &lt;- as.vector(na.omit(data))<\/em>. L&rsquo;\u00e9valuation de <em>as.vector()<\/em> a pour effet direct et d\u00e9lib\u00e9r\u00e9 de d\u00e9pouiller le conteneur de l&rsquo;ensemble de ses attributs superflus (\u00e0 l&rsquo;exception notable des noms d&rsquo;\u00e9l\u00e9ments \u00e9ventuels), \u00e9liminant d&rsquo;un coup l&rsquo;attribut <em>na.action<\/em> ainsi que la classe S3 associ\u00e9e. L&rsquo;objet r\u00e9sultant est alors indistinguable en m\u00e9moire de celui produit par le masquage bool\u00e9en <em>data[!is.na(data)]<\/em>.<\/p>\n<p>La seconde alternative, plus chirurgicale encore, consiste \u00e0 cibler et d\u00e9truire individuellement l&rsquo;attribut ind\u00e9sirable sans r\u00e9g\u00e9n\u00e9rer un nouvel objet vectoriel, en exploitant l&rsquo;assignation de la valeur sp\u00e9ciale <em>NULL<\/em> au pointeur attributaire sp\u00e9cifique. L&rsquo;expression s&rsquo;articule par : <em>attr(mesures_propres, \u00ab\u00a0na.action\u00a0\u00bb) &lt;- NULL<\/em>. D\u00e8s l&rsquo;ex\u00e9cution de cette directive, la m\u00e9tadonn\u00e9e d&rsquo;omission est dissoute, restaurant instantan\u00e9ment la virginit\u00e9 structurelle du vecteur atomique.<\/p>\n<p>Cette \u00e9puration des attributs rev\u00eat une importance critique pr\u00e9alable \u00e0 certaines op\u00e9rations de s\u00e9rialisation binaire (par exemple lors de l&rsquo;exportation d&rsquo;objets volumineux vers des formats interop\u00e9rables tels que Feather, Arrow, ou des tables relationnelles SQL). La persistance d&rsquo;attributs de classe personnalis\u00e9s peut en effet entraver les processus automatis\u00e9s d&rsquo;inf\u00e9rence de sch\u00e9ma lors de l&rsquo;exportation des pipelines de donn\u00e9es assainies vers des environnements de calcul distribu\u00e9.<\/p>\n<h2>9. Analyse comparative rigoureuse des trois m\u00e9thodes d&rsquo;omission<\/h2>\n<h3>9.1 Matrice de comparaison technique et ergonomique<\/h3>\n<p>Pour synth\u00e9tiser la richesse des comportements algorithmiques d\u00e9crits pr\u00e9c\u00e9demment, il s&rsquo;av\u00e8re indispensable d&rsquo;adopter une grille d&rsquo;analyse comparative formalisant les compromis techniques et ergonomiques inh\u00e9rents \u00e0 chaque m\u00e9thode. Le tableau de crit\u00e8res analytiques structure l&rsquo;espace de d\u00e9cision autour de quatre piliers conceptuels : la permanence de la modification, la signature m\u00e9moire, la conservation d&rsquo;historique et la portabilit\u00e9 syntaxique.<\/p>\n<p>L&rsquo;approche par indexation bool\u00e9enne <em>data[!is.na(data)]<\/em> se positionne sans conteste comme la solution la plus performante en mati\u00e8re de flexibilit\u00e9 op\u00e9ratoire et d&rsquo;interop\u00e9rabilit\u00e9 logicielle. Elle garantit l&rsquo;obtention imm\u00e9diate d&rsquo;un vecteur atomique intrins\u00e8quement pur, vierge de tout art\u00e9fact structurel. Sa concision d&rsquo;\u00e9criture est optimale pour tout praticien aguerri \u00e0 la programmation vectorielle de style R. En contrepartie, elle requiert une discipline m\u00e9thodologique accrue pour \u00e9viter la perte irr\u00e9versible de synchronisation indicielle dans les analyses multivari\u00e9es.<\/p>\n<p>L&rsquo;utilisation du param\u00e8tre <em>na.rm = TRUE<\/em> incarne quant \u00e0 elle l&rsquo;arch\u00e9type de la neutralisation ergonomique non invasive. Sa lisibilit\u00e9 au sein du code est limpide et imm\u00e9diatement compr\u00e9hensible pour un r\u00e9viseur de code ou un auditeur scientifique externe. Elle pr\u00e9sente l&rsquo;avantage incomparable de pr\u00e9server intacte la g\u00e9om\u00e9trie spatiale de la structure de donn\u00e9es d&rsquo;origine, rel\u00e9guant la question de l&rsquo;omission au rang d&rsquo;un \u00e9piph\u00e9nom\u00e8ne purement algorithmique born\u00e9 au temps d&rsquo;ex\u00e9cution de la fonction d&rsquo;agr\u00e9gation. Sa limite r\u00e9side naturellement dans son inaptitude structurelle \u00e0 fournir un conteneur \u00e9pur\u00e9 r\u00e9utilisable hors du p\u00e9rim\u00e8tre de la fonction h\u00f4te.<\/p>\n<p>Enfin, la m\u00e9thode mobilisant <em>na.omit()<\/em> repr\u00e9sente le standard par excellence pour l&rsquo;auditabilit\u00e9 et la mod\u00e9lisation statistique formelle. En combinant la purge physique des \u00e9l\u00e9ments et l&rsquo;encapsulation m\u00e9tas\u00e9mantique des coordonn\u00e9es de rejet, elle r\u00e9pond id\u00e9alement aux exigences de tra\u00e7abilit\u00e9 scientifique de bout en bout. Son co\u00fbt r\u00e9side principalement dans une l\u00e9g\u00e8re surcharge computationnelle et la n\u00e9cessit\u00e9 \u00e9ventuelle de neutraliser subs\u00e9quemment les attributs de classe pour apaiser les routines aval les plus sourcilleuses.<\/p>\n<h3>9.2 Benchmark de rapidit\u00e9 d&rsquo;ex\u00e9cution et de charge m\u00e9moire<\/h3>\n<p>L&rsquo;arbitrage entre ces trois approches ne saurait faire l&rsquo;impasse sur une \u00e9valuation empirique rigoureuse de leurs performances chronom\u00e9triques et de leur consommation spatiale au sein de l&rsquo;environnement de calcul. La conduite d&rsquo;un banc d&rsquo;essai comparatif au moyen du package de haute pr\u00e9cision <em>microbenchmark<\/em> sur des vecteurs synth\u00e9tiques de grande dimension (contenant de 1 \u00e0 10 millions d&rsquo;observations int\u00e9grant un taux d&rsquo;incompl\u00e9tude stochastique de 10 %) permet de d\u00e9gager des hi\u00e9rarchies d&rsquo;efficience incontestables.<\/p>\n<p>Les mesures chronom\u00e9triques r\u00e9v\u00e8lent de mani\u00e8re constante la sup\u00e9riorit\u00e9 op\u00e9rationnelle de l&rsquo;\u00e9valuation native conditionnelle via l&rsquo;argument <em>na.rm = TRUE<\/em> au sein des fonctions math\u00e9matiques primitives de base. \u00c9tant directement impl\u00e9ment\u00e9e au niveau des boucles de bas niveau en C au sein du noyau interpr\u00e9teur de R, cette m\u00e9thode \u00e9vite l&rsquo;instanciation de tout vecteur de masquage interm\u00e9diaire dans l&rsquo;espace utilisateur. Elle affiche syst\u00e9matiquement les temps d&rsquo;ex\u00e9cution les plus brefs et une empreinte m\u00e9moire incr\u00e9mentale rigoureusement nulle, aucune structure transitoire n&rsquo;\u00e9tant projet\u00e9e sur le tas (<em>heap<\/em>).<\/p>\n<p>L&rsquo;indexation logique directe <em>data[!is.na(data)]<\/em> arrive en deuxi\u00e8me position dans cette hi\u00e9rarchie de performance, enregistrant des temps de traitement infinit\u00e9simaux sur les volum\u00e9tries mod\u00e9r\u00e9es, mais subissant un l\u00e9ger ralentissement d&rsquo;\u00e9chelle proportionnel au co\u00fbt d&rsquo;instanciation du vecteur bool\u00e9en interm\u00e9diaire de dimension <em>N<\/em>. Enfin, la fonction g\u00e9n\u00e9rique <em>na.omit()<\/em> s&rsquo;av\u00e8re chronom\u00e9triquement la plus on\u00e9reuse des trois approches. Cette p\u00e9nalit\u00e9 temporelle s&rsquo;explique m\u00e9caniquement par le surco\u00fbt algorithmique li\u00e9 au m\u00e9canisme de dispatching de m\u00e9thode S3, mais surtout par la construction co\u00fbteuse en temps processeur du vecteur d&rsquo;entiers h\u00e9bergeant les indices d&rsquo;omission et l&rsquo;assignation formelle de la structure attributaire au sein de la table de hachage de l&rsquo;objet de sortie.<\/p>\n<h3>9.3 Arbre d\u00e9cisionnel pour guider le choix m\u00e9thodologique<\/h3>\n<p>Afin d&rsquo;offrir une gouvernance m\u00e9thodologique claire et reproductible \u00e0 l&rsquo;analyste de donn\u00e9es, l&rsquo;agencement du flux d\u00e9cisionnel peut \u00eatre formalis\u00e9 au travers d&rsquo;une succession de tests logiques structur\u00e9s selon la nature des besoins analytiques :<\/p>\n<ul>\n<li><strong>Cas d&rsquo;usage 1 : Calcul ponctuel d&rsquo;une m\u00e9trique globale descriptive ou inf\u00e9rentielle.<\/strong> Si la finalit\u00e9 op\u00e9rationnelle consiste exclusivement \u00e0 quantifier un moment statistique (moyenne, m\u00e9diane, variance) ou un indicateur de position sur une variable isol\u00e9e dont l&rsquo;int\u00e9grit\u00e9 structurelle globale doit \u00eatre maintenue intacte pour des mod\u00e9lisations futures, l&rsquo;orientation syst\u00e9matique doit se porter vers l&rsquo;argument formel <strong>na.rm = TRUE<\/strong>.<\/li>\n<li><strong>Cas d&rsquo;usage 2 : N\u00e9cessit\u00e9 d&rsquo;obtenir un sous-vecteur atomique dense sans conservation d&rsquo;historique.<\/strong> Si l&rsquo;algorithme suivant exige un vecteur atomique rigoureux, compact\u00e9, de dimension r\u00e9duite et exempt de m\u00e9tadonn\u00e9es perturbatrices pour alimenter des fonctions bas niveau, du code parall\u00e9lis\u00e9 ou des extensions en langage C\/C++, l&rsquo;analyste privil\u00e9giera l&rsquo;\u00e9lagage par masquage bool\u00e9en direct <strong>data[!is.na(data)]<\/strong>.<\/li>\n<li><strong>Cas d&rsquo;usage 3 : Exigence de tra\u00e7abilit\u00e9 statistique et interfa\u00e7age avec des formalismes de mod\u00e9lisation.<\/strong> Si le protocole exp\u00e9rimental requiert d&rsquo;archiver de mani\u00e8re formelle et v\u00e9rifiable l&rsquo;identit\u00e9 pr\u00e9cise des unit\u00e9s d&rsquo;observation amput\u00e9es, ou si les donn\u00e9es doivent alimenter directement des pipelines exploitant le comportement de la classe <em>na.action<\/em>, le recours \u00e0 la fonction g\u00e9n\u00e9rique <strong>na.omit()<\/strong> devient m\u00e9thodologiquement incontournable.<\/li>\n<\/ul>\n<h2>10. Consid\u00e9rations avanc\u00e9es : Types de vecteurs et classes atomiques face aux NA<\/h2>\n<h3>10.1 Application aux vecteurs textuels (character)<\/h3>\n<p>Si la probl\u00e9matique des valeurs manquantes est usuellement abord\u00e9e au travers du prisme des grandeurs num\u00e9riques, le traitement des vecteurs de cha\u00eenes de caract\u00e8res (<em>character vectors<\/em>) rec\u00e8le des pi\u00e8ges typologiques particuli\u00e8rement sournois qu&rsquo;il convient de d\u00e9samorcer avec rigueur. Dans un vecteur textuel, la pr\u00e9sence de la constante <em>NA_character_<\/em> est formellement distincte de la cha\u00eene de caract\u00e8res vide, not\u00e9e <em>\u00ab\u00a0\u00a0\u00bb<\/em>.<\/p>\n<p>Une cha\u00eene vide est une entit\u00e9 informationnelle valide et d\u00e9finie dont la longueur de cha\u00eene (\u00e9valu\u00e9e par <em>nchar(\u00ab\u00a0\u00a0\u00bb)<\/em>) \u00e9quivaut \u00e0 z\u00e9ro octet de texte, mais qui ne constitue en aucun cas une absence de mesure au sens ontologique du terme. L&rsquo;application de la fonction de test <em>is.na(\u00ab\u00a0\u00a0\u00bb)<\/em> retourne formellement la valeur logique <em>FALSE<\/em>. L&rsquo;analyste confront\u00e9 \u00e0 des importations de fichiers textuels mal form\u00e9s (tels que des exports CSV d\u00e9fectueux) doit imp\u00e9rativement veiller \u00e0 op\u00e9rer une recodification pr\u00e9alable des cha\u00eenes vides ou des espaces r\u00e9siduels en v\u00e9ritables entit\u00e9s <em>NA<\/em> avant de d\u00e9ployer l&rsquo;une des trois m\u00e9thodes d&rsquo;omission vectorielle.<\/p>\n<p>Le pi\u00e8ge le plus pernicieux r\u00e9side dans la conversion involontaire du symbole manquant en cha\u00eene de caract\u00e8res litt\u00e9rale : <em>\u00ab\u00a0NA\u00a0\u00bb<\/em>. Ce ph\u00e9nom\u00e8ne survient fr\u00e9quemment lors de l&rsquo;ingestion de fichiers texte o\u00f9 les d\u00e9limiteurs sont mal interpr\u00e9t\u00e9s, contraignant le syst\u00e8me d&rsquo;entr\u00e9e-sortie de R \u00e0 typer la colonne comme une cha\u00eene textuelle r\u00e9guli\u00e8re. Dans cette conjoncture tragique pour l&rsquo;analyse, l&rsquo;expression <em>\u00ab\u00a0NA\u00a0\u00bb<\/em> est un mot de deux lettres parfaitement l\u00e9gitime. La primitive <em>is.na(\u00ab\u00a0NA\u00a0\u00bb)<\/em> renverra irr\u00e9vocablement <em>FALSE<\/em>. L&rsquo;assainissement de tels vecteurs impose une validation s\u00e9mantique stricte en amont des processus de tokenisation ou de fouille textuelle, combinant la d\u00e9tection textuelle explicite et la coercition contr\u00f4l\u00e9e vers <em>NA_character_<\/em>.<\/p>\n<h3>10.2 Comportement sp\u00e9cifique sur les facteurs (factor)<\/h3>\n<p>Les vecteurs qualitatifs r\u00e9gis par la classe d&rsquo;objets S3 <em>factor<\/em> pr\u00e9sentent un comportement structurel d&rsquo;une complexit\u00e9 singuli\u00e8re face \u00e0 l&rsquo;\u00e9limination des valeurs manquantes. Un facteur est constitu\u00e9 d&rsquo;un vecteur sous-jacent d&rsquo;entiers index\u00e9s pointant vers une table de correspondance d&rsquo;\u00e9tiquettes textuelles d\u00e9nomm\u00e9e <em>levels<\/em> (niveaux factoriels). L&rsquo;introduction ou l&rsquo;omission d&rsquo;un <em>NA<\/em> dans cette machinerie requiert des pr\u00e9cautions m\u00e9thodologiques d&rsquo;orf\u00e8vre.<\/p>\n<p>Lorsqu&rsquo;un analyste applique la m\u00e9thode de filtrage logique <em>data &lt;- data[!is.na(data)]<\/em> ou la fonction <em>na.omit()<\/em> sur un facteur, les \u00e9l\u00e9ments atomiques manquants sont bel et bien soustraits du vecteur visible. Toutefois, cette op\u00e9ration n&rsquo;alt\u00e8re absolument pas l&rsquo;attribut <em>levels<\/em> associ\u00e9 \u00e0 l&rsquo;objet. Si un niveau cat\u00e9goriel n&rsquo;\u00e9tait repr\u00e9sent\u00e9 dans l&rsquo;\u00e9chantillon que par des observations associ\u00e9es \u00e0 des lacunes ou si l&rsquo;ensemble des repr\u00e9sentants d&rsquo;une modalit\u00e9 a \u00e9t\u00e9 purg\u00e9 lors du nettoyage, ce niveau persiste \u00e0 l&rsquo;\u00e9tat de niveau fant\u00f4me ou orphelin au sein des m\u00e9tadonn\u00e9es du facteur. L&rsquo;\u00e9valuation ult\u00e9rieure d&rsquo;une table de contingence via <em>table(data)<\/em> continuera de faire appara\u00eetre cette modalit\u00e9 r\u00e9siduelle avec un effectif de z\u00e9ro, ce qui peut vicier l&rsquo;\u00e9valuation des degr\u00e9s de libert\u00e9 lors de tests d&rsquo;ad\u00e9pendance du Chi-deux.<\/p>\n<p>Pour parachever l&rsquo;assainissement d&rsquo;un facteur apr\u00e8s suppression des <em>NA<\/em>, l&rsquo;analyste doit imp\u00e9rativement purger les niveaux orphelins en mobilisant la fonction sp\u00e9cialis\u00e9e <em>droplevels()<\/em>, selon la s\u00e9quence ordonn\u00e9e : <em>clean_factor &lt;- droplevels(data[!is.na(data)])<\/em>. R\u00e9ciproquement, dans les contextes o\u00f9 l&rsquo;absence d&rsquo;information rev\u00eat une signification clinique ou sociologique substantielle qui m\u00e9rite d&rsquo;\u00eatre int\u00e9gr\u00e9e comme une modalit\u00e9 d&rsquo;analyse \u00e0 part enti\u00e8re dans un mod\u00e8le cat\u00e9goriel, l&rsquo;analyste exploitera judicieusement la fonction native <em>addNA()<\/em>. Cette derni\u00e8re a pour effet de promouvoir le statut d&rsquo;incompl\u00e9tude au rang de niveau factoriel explicite et observable, l&rsquo;int\u00e9grant formellement dans la g\u00e9om\u00e9trie du facteur.<\/p>\n<h3>10.3 Particularit\u00e9s des vecteurs temporels (Date et POSIXct)<\/h3>\n<p>Le traitement des donn\u00e9es chronologiques structur\u00e9es sous les classes natives <em>Date<\/em> et <em>POSIXct<\/em> r\u00e9pond \u00e0 des imp\u00e9ratifs d&rsquo;int\u00e9grit\u00e9 analytique similaires mais amplifi\u00e9s par la d\u00e9pendance s\u00e9quentielle inh\u00e9rente aux s\u00e9ries temporelles. Au niveau de la m\u00e9moire machine, un objet <em>Date<\/em> n&rsquo;est autre qu&rsquo;un vecteur de r\u00e9els repr\u00e9sentant le nombre de jours \u00e9coul\u00e9s depuis l&rsquo;\u00e9poque pivot du 1er janvier 1970, tandis qu&rsquo;un objet <em>POSIXct<\/em> quantifie le nombre de secondes \u00e9coul\u00e9es sous le standard UTC.<\/p>\n<p>Lorsqu&rsquo;une valeur temporelle est manquante, elle est instanci\u00e9e sous la forme d&rsquo;un <em>NA_real_<\/em> d\u00e9cor\u00e9 de la classe temporelle ad\u00e9quate. Si l&rsquo;on proc\u00e8de \u00e0 l&rsquo;\u00e9limination des <em>NA<\/em> temporels au moyen du masquage bool\u00e9en <em>dates[!is.na(dates)]<\/em>, la coh\u00e9rence du format d&rsquo;affichage et les attributs de fuseau horaire (<em>tzone<\/em>) sont rigoureusement pr\u00e9serv\u00e9s par R, assurant la continuit\u00e9 de l&rsquo;interpr\u00e9tation calendaire. Cependant, les cons\u00e9quences de cette omission sur les analyses dynamiques sont critiques.<\/p>\n<p>Dans une s\u00e9rie chronologique r\u00e9guli\u00e8re, l&rsquo;\u00e9lagage physique d&rsquo;un scalaire temporel manquant brise irr\u00e9m\u00e9diablement l&rsquo;\u00e9quidistance des intervalles chronologiques (le pas de temps <span class=\"arabpsy-math-inline\" data-latex=\"\\Delta t\">$\\Delta t$<\/span>). La structure n&rsquo;est plus continue, et l&rsquo;application imm\u00e9diate de calculs de d\u00e9calage temporel (<em>lag<\/em>), d&rsquo;auto-corr\u00e9lations ou d&rsquo;ajustements par des mod\u00e8les autor\u00e9gressifs int\u00e9gr\u00e9s de moyenne mobile (<a rel=\"noopener noreferrer\" href=\"https:\/\/otexts.com\/fpp3\/arima.html\">mod\u00e8les ARIMA<\/a>) devient strictement invalide sans une r\u00e9indexation temporelle formelle pr\u00e9alable. Dans ce contexte pr\u00e9cis, la suppression vectorielle s\u00e8che des <em>NA<\/em> doit imp\u00e9rativement \u00eatre subordonn\u00e9e \u00e0 des proc\u00e9dures d&rsquo;interpolation lin\u00e9aire, de r\u00e9-\u00e9chantillonnage r\u00e9gulier ou d&rsquo;imputation par la derni\u00e8re valeur valide observ\u00e9e (<em>Last Observation Carried Forward<\/em>).<\/p>\n<h2>11. Bonnes pratiques de nettoyage vectoriel pour la recherche reproductible<\/h2>\n<h3>11.1 Documentation syst\u00e9matique du profil de vacuit\u00e9<\/h3>\n<p>L&rsquo;assainissement des donn\u00e9es ne doit jamais \u00eatre con\u00e7u comme une op\u00e9ration clandestine et destructrice, men\u00e9e en catimini au d\u00e9but d&rsquo;un script d&rsquo;analyse. Dans le paradigme contemporain de la <a rel=\"noopener noreferrer\" href=\"https:\/\/www.nature.com\/articles\/sdata201618\">recherche reproductible et des principes FAIR<\/a> (Facile \u00e0 trouver, Accessible, Interop\u00e9rable et R\u00e9utilisable), tout traitement inflig\u00e9 \u00e0 un vecteur d&rsquo;observations doit \u00eatre document\u00e9, quantifi\u00e9 et tra\u00e7able de mani\u00e8re d\u00e9terministe.<\/p>\n<p>La r\u00e8gle d&rsquo;or initiale impose de mesurer et de consigner formellement le taux de compl\u00e9tude de chaque variable pr\u00e9alablement \u00e0 toute man\u0153uvre d&rsquo;omission. Ce profilage statistique s&rsquo;accomplit avec une grande \u00e9l\u00e9gance vectorielle en tirant profit du fait qu&rsquo;en contexte arithm\u00e9tique, les valeurs bool\u00e9ennes <em>TRUE<\/em> et <em>FALSE<\/em> issues de <em>is.na()<\/em> sont automatiquement converties en 1 et 0. Ainsi, l&rsquo;\u00e9valuation de l&rsquo;expression <em>taux_manquant &lt;- mean(is.na(data)) * 100<\/em> fournit instantan\u00e9ment le pourcentage exact d&rsquo;incompl\u00e9tude du vecteur consid\u00e9r\u00e9. Ce m\u00e9trique pr\u00e9liminaire constitue un indicateur d&rsquo;alerte indispensable : un taux d&rsquo;omission de 1 % ne soul\u00e8ve g\u00e9n\u00e9ralement que peu d&rsquo;objections m\u00e9thodologiques, tandis qu&rsquo;une vacuit\u00e9 exc\u00e9dant 30 ou 40 % impose une remise en question radicale du protocole exp\u00e9rimental ou le recours \u00e0 des approches d&rsquo;imputation multiple par \u00e9quations cha\u00een\u00e9es.<\/p>\n<p>Une seconde bonne pratique fondamentale stipule la sanctuarisation absolue du vecteur brut d&rsquo;origine. L&rsquo;analyste averti s&rsquo;abstiendra de pratiquer une r\u00e9assignation destructive h\u00e2tive \u00e9crasant la variable d&rsquo;entr\u00e9e tant que l&rsquo;int\u00e9grit\u00e9 de la cha\u00eene de nettoyage n&rsquo;a point \u00e9t\u00e9 scell\u00e9e par des tests d&rsquo;assertion formels. L&rsquo;int\u00e9gration de primitives d&rsquo;interruption conditionnelle telles que <em>stopifnot()<\/em> ou l&rsquo;\u00e9criture de tests unitaires formels via le package <em>testthat<\/em> permet de certifier que l&rsquo;op\u00e9ration de purge a rigoureusement rempli ses objectifs (par exemple en v\u00e9rifiant l&rsquo;assertion <em>stopifnot(sum(is.na(clean_data)) == 0)<\/em>) avant d&rsquo;engager les calculs d&rsquo;inf\u00e9rence statistique ult\u00e9rieurs.<\/p>\n<h3>11.2 Int\u00e9gration fluide dans les pipelines de traitement de donn\u00e9es<\/h3>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me de programmation moderne impuls\u00e9 depuis la version 4.1 de R, la manipulation des donn\u00e9es est de plus en plus articul\u00e9e autour de flux de tuyautage s\u00e9quentiel rendus possibles par l&rsquo;introduction de l&rsquo;op\u00e9rateur de tuyauterie natif (<em>native pipe<\/em>), symbolis\u00e9 par la s\u00e9quence <em>|&gt;<\/em>. L&rsquo;int\u00e9gration des trois m\u00e9thodes d&rsquo;assainissement vectoriel au sein de ces architectures fonctionnelles \u00e9pur\u00e9es exige une compr\u00e9hension limpide de la mani\u00e8re dont les arguments sont d\u00e9l\u00e9gu\u00e9s.<\/p>\n<p>La fonction g\u00e9n\u00e9rique <em>na.omit()<\/em> s&rsquo;int\u00e8gre par nature de fa\u00e7on immacul\u00e9e au tuyautage natif, son premier argument formel \u00e9tant pr\u00e9cis\u00e9ment l&rsquo;objet source \u00e0 transformer. L&rsquo;analyste peut ainsi r\u00e9diger des s\u00e9quences d&rsquo;\u00e9valuation hautement lisibles et lin\u00e9aires, par exemple : <em>mesures_brutes |&gt; na.omit() |&gt; as.vector() |&gt; summary()<\/em>. Dans ce flux fonctionnel, la structure transite de mani\u00e8re limpide d&rsquo;un n\u0153ud de transformation \u00e0 l&rsquo;autre sans assignation d&rsquo;identifiants variables temporaires polluant l&rsquo;espace de travail.<\/p>\n<p>Pour ce qui rel\u00e8ve de l&rsquo;indexation bool\u00e9enne au sein d&rsquo;un pipeline moderne, l&rsquo;usage de fonctions anonymes courtes (not\u00e9es via la syntaxe compacte <em>(x)<\/em>) offre une alternative s\u00e9duisante et purement fonctionnelle : <em>mesures_brutes |&gt; ((v) v[!is.na(v)])() |&gt; mean()<\/em>. Enfin, cette discipline d&rsquo;ing\u00e9nierie logicielle s&rsquo;\u00e9tend naturellement \u00e0 l&rsquo;interop\u00e9rabilit\u00e9 avec les structures tabulaires rectangulaires de type <em>data.frame<\/em> ou <em>tibble<\/em>, o\u00f9 l&rsquo;assainissement cibl\u00e9 d&rsquo;un vecteur composant peut \u00eatre encapsul\u00e9 de mani\u00e8re \u00e9tanche au sein de directives conditionnelles garantissant l&rsquo;absence de r\u00e9gression fonctionnelle au sein de l&rsquo;architecture logicielle globale.<\/p>\n<h2>12. Synth\u00e8se m\u00e9thodologique et recommandations pratiques pour l&rsquo;analyste<\/h2>\n<h3>12.1 Synth\u00e8se globale des approches explor\u00e9es<\/h3>\n<p>Au terme de cette exploration exhaustive des arcanes de la gestion des donn\u00e9es manquantes dans les vecteurs R, il convient de dresser une synth\u00e8se int\u00e9grative condensant les singularit\u00e9s des trois paradigmes analys\u00e9s. Loin de s&rsquo;exclure mutuellement, ces trois m\u00e9thodes composent une bo\u00eete \u00e0 outils compl\u00e9mentaire au sein de laquelle chaque strat\u00e9gie r\u00e9pond avec acuit\u00e9 \u00e0 un objectif analytique parfaitement circonscrit.<\/p>\n<p>La premi\u00e8re m\u00e9thode, articul\u00e9e autour du filtrage logique par <em>data[!is.na(data)]<\/em>, incarne la quintessence du paradigme vectoriel de R. Elle offre \u00e0 l&rsquo;analyste une ma\u00eetrise granulaire absolue sur la s\u00e9lection des coordonn\u00e9es scalaires, une absence totale de contamination par des m\u00e9tadonn\u00e9es orphelines et une compatibilit\u00e9 sans \u00e9gale avec les couches logicielles les plus contraintes de l&rsquo;\u00e9cosyst\u00e8me. Elle constitue l&rsquo;instrument d&rsquo;\u00e9lection pour transformer durablement un vecteur pollu\u00e9 en une structure atomique pure pr\u00eate pour le calcul math\u00e9matique haute performance.<\/p>\n<p>La deuxi\u00e8me approche, op\u00e9r\u00e9e via l&rsquo;argument contextuel <em>na.rm = TRUE<\/em>, s&rsquo;impose comme l&rsquo;outil privil\u00e9gi\u00e9 de l&rsquo;\u00e9conomie computationnelle et du respect des g\u00e9om\u00e9tries multivari\u00e9es. En d\u00e9l\u00e9guant l&rsquo;omission aux primitives internes de bas niveau, elle pr\u00e9munit l&rsquo;analyste contre les ruptures dimensionnelles d\u00e9synchronisant les matrices de travail, tout en garantissant des temps d&rsquo;ex\u00e9cution minimaux. Elle trouve sa l\u00e9gitimit\u00e9 indiscutable dans toutes les \u00e9tapes d&rsquo;exploration descriptive pr\u00e9liminaire o\u00f9 la structure des tables m\u00e8res doit demeurer imm\u00e9moriale.<\/p>\n<p>La troisi\u00e8me m\u00e9thode enfin, mat\u00e9rialis\u00e9e par l&rsquo;appel \u00e0 la fonction g\u00e9n\u00e9rique <em>na.omit()<\/em>, comble le foss\u00e9 s\u00e9parant l&rsquo;ing\u00e9nierie de donn\u00e9es pure et les exigences de documentation de la mod\u00e9lisation statistique avanc\u00e9e. En compactant le vecteur tout en archivant avec pr\u00e9cision la g\u00e9om\u00e9trie de la purge au sein de la classe <em>na.action<\/em>, elle apporte une r\u00e9ponse structurelle irrempla\u00e7able aux exigences de tra\u00e7abilit\u00e9, de transparence et d&rsquo;auditabilit\u00e9 impos\u00e9es par les standards contemporains de la pratique scientifique.<\/p>\n<h3>12.2 Directives finales pour un code robuste et performant<\/h3>\n<p>Pour clore ce trait\u00e9 m\u00e9thodologique, quelques directives formelles d&rsquo;ing\u00e9nierie logicielle peuvent \u00eatre \u00e9dict\u00e9es afin de guider l&rsquo;analyste vers la r\u00e9daction d&rsquo;un code R p\u00e9renne, performant et \u00e9l\u00e9gant :<\/p>\n<ul>\n<li><strong>Proscrire absolument l&rsquo;usage des op\u00e9rateurs d&rsquo;\u00e9galit\u00e9 avec NA.<\/strong> Ne jamais recourir \u00e0 l&rsquo;instruction <em>data == NA<\/em> pour tenter d&rsquo;identifier une valeur manquante. Utiliser de mani\u00e8re univoque la primitive intrins\u00e8que <strong>is.na()<\/strong>, con\u00e7ue pour op\u00e9rer sur la logique tri-valu\u00e9e du syst\u00e8me.<\/li>\n<li><strong>Favoriser la lisibilit\u00e9 s\u00e9mantique pour les pairs.<\/strong> Choisir la m\u00e9thode d&rsquo;omission non pas en vertu d&rsquo;une habitude m\u00e9canique, mais en fonction explicite de l&rsquo;intention du script. Si l&rsquo;op\u00e9ration ne vise qu&rsquo;\u00e0 calculer une moyenne, recourir \u00e0 <strong>na.rm = TRUE<\/strong> ; si l&rsquo;objet doit \u00eatre r\u00e9inject\u00e9 dans une routine C++, op\u00e9rer par masquage bool\u00e9en <strong>[!is.na()]<\/strong>.<\/li>\n<li><strong>Mesurer l&rsquo;incompl\u00e9tude avant toute suppression.<\/strong> Int\u00e9grer syst\u00e9matiquement une phase d&rsquo;audit pr\u00e9alable chiffrant le pourcentage d&rsquo;observations manquantes afin d&rsquo;\u00e9valuer la repr\u00e9sentativit\u00e9 du sous-\u00e9chantillon subsistant.<\/li>\n<li><strong>V\u00e9rifier les cas limites pathologiques.<\/strong> S\u00e9curiser syst\u00e9matiquement les scripts de production contre l&rsquo;\u00e9ventualit\u00e9 de vecteurs enti\u00e8rement vides ou compos\u00e9s exclusivement de <em>NA<\/em>, afin de parer aux retours d\u00e9stabilisants d&rsquo;infinis (<em>Inf<\/em>, <em>-Inf<\/em>) g\u00e9n\u00e9r\u00e9s par des fonctions d&rsquo;extr\u00eames d\u00e9nu\u00e9es de mati\u00e8re num\u00e9rique.<\/li>\n<li><strong>Conserver des conteneurs immutables lors des explorations initiales.<\/strong> \u00c9viter l&rsquo;\u00e9crasement pr\u00e9cipit\u00e9 de la variable d&rsquo;origine pour pr\u00e9venir toute d\u00e9synchronisation irr\u00e9m\u00e9diable avec les covariables d&rsquo;un m\u00eame \u00e9chantillon statistique.<\/li>\n<\/ul>\n<p>Par l&rsquo;application scrupuleuse de ces pr\u00e9ceptes algorithmiques et m\u00e9thodologiques, le praticien s&rsquo;assure non seulement de l&rsquo;exactitude num\u00e9rique de ses calculs vectoriels, mais contribue activement \u00e0 l&rsquo;\u00e9dification d&rsquo;une science des donn\u00e9es transparente, robuste et reproductible, exploitant au z\u00e9nith de ses potentialit\u00e9s le formidable moteur computationnel qu&rsquo;est l&rsquo;environnement R.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Chambers, J. M. (2008). <em>Software for Data Analysis: Programming with R<\/em>. Springer Science &amp; Business Media. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1007\/978-0-387-75936-4\">https:\/\/doi.org\/10.1007\/978-0-387-75936-4<\/a><\/li>\n<li>Chambers, J. M. (2016). <em>Extending R<\/em>. Chapman and Hall\/CRC. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1201\/9781315381305\">https:\/\/doi.org\/10.1201\/9781315381305<\/a><\/li>\n<li>IEEE. (2019). <em>IEEE Standard for Floating-Point Arithmetic<\/em> (IEEE Std 754-2019). IEEE Computer Society. <a rel=\"noopener noreferrer\" href=\"https:\/\/standards.ieee.org\/ieee\/754\/6210\/\">https:\/\/standards.ieee.org\/ieee\/754\/6210\/<\/a><\/li>\n<li>Ihaka, R., &amp; Gentleman, R. (1996). R: A language for data analysis and graphics. <em>Journal of Computational and Graphical Statistics<\/em>, 5(3), 299\u2013314. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/1390807\">https:\/\/doi.org\/10.2307\/1390807<\/a><\/li>\n<li>Little, R. J., &amp; Rubin, D. B. (2019). <em>Statistical Analysis with Missing Data<\/em> (3rd ed.). John Wiley &amp; Sons. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/9781119482865\">https:\/\/doi.org\/10.1002\/9781119482865<\/a><\/li>\n<li>R Core Team. (2023). <em>R: A Language and Environment for Statistical Computing<\/em>. R Foundation for Statistical Computing, Vienna, Austria. <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">https:\/\/www.r-project.org\/<\/a><\/li>\n<li>R Core Team. (2023). <em>R Internals<\/em>. R Foundation for Statistical Computing, Vienna, Austria. <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-ints.html\">https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-ints.html<\/a><\/li>\n<li>Rubin, D. B. (1976). Inference and missing data. <em>Biometrika<\/em>, 63(3), 581\u2013592. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1093\/biomet\/63.3.581\">https:\/\/doi.org\/10.1093\/biomet\/63.3.581<\/a><\/li>\n<li>Wickham, H. (2019). <em>Advanced R<\/em> (2nd ed.). Chapman and Hall\/CRC. <a rel=\"noopener noreferrer\" href=\"https:\/\/adv-r.hadley.nz\/\">https:\/\/adv-r.hadley.nz\/<\/a><\/li>\n<li>Wilkinson, M. D., Dumontier, M., Aalbersberg, I. J., Appleton, G., Axton, M., Baak, A., &#8230; &amp; Mons, B. (2016). The FAIR Guiding Principles for scientific data management and stewardship. <em>Scientific Data<\/em>, 3, 160018. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/sdata.2016.18\">https:\/\/doi.org\/10.1038\/sdata.2016.18<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour supprimer les valeurs NA d&rsquo;un vecteur dans R : indexation logique, argument na.rm et fonction na.omit d\u00e9crypt\u00e9s en d\u00e9tail.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2193,2464],"tags":[3391,3047,2658,3065,4111],"class_list":["post-5213","psych_stat","type-psych_stat","status-publish","hentry","category-programmation-r","category-science-des-donnees","tag-is-na","tag-na-omit","tag-r","tag-valeurs-manquantes","tag-vecteur"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5213","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=5213"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5213\/revisions"}],"predecessor-version":[{"id":16750,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5213\/revisions\/16750"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}