Les lecteurs ayant un arrière-plan dans d'autres langages de script peuvent être conscients des valeurs «pas de tels animaux», telles que None en Python et indéfinies dans Perl. R possède en fait deux valeurs: NA et NULL.
Dans les ensembles de données statistiques, nous rencontrons souvent des données manquantes, que nous représentons dans R avec la valeur NA. NULL, d'autre part, représente la valeur qui n'existe tout simplement pas. Voyons comment cela se concrétise concrètement.


1 Utilisation de NA
Dans plusieurs des fonctions statistiques de R, nous pouvons indiquer à la fonction de sauter toutes les valeurs manquantes, ou NA. Voici un exemple:

  1. > x <- c(88,NA,12,168,13)
  2. > x
  3. [1] 88 NA 12 168 13
  4. > mean(x)
  5. [1] NA
  6. > mean(x,na.rm=T)
  7. [1] 70.25
  8. > x <- c(88,NULL,12,168,13)
  9. > mean(x)
  10. [1] 70.25
Source code
Dans le premier appel, mean () a refusé de calculer, car une valeur dans x était NA. Mais en définissant l'argument facultatif na.rm (NA remove) sur true (T), nous avons calculé la moyenne des éléments restants. Mais R a automatiquement sauté sur la valeur NULL, que nous allons voir dans la section suivante.
Il existe plusieurs valeurs NA, une pour chaque mode:
  1. > x <- c(5,NA,12)
  2. > mode(x[1])
  3. [1] "numeric"
  4. > mode(x[2])
  5. [1] "numeric"
  6. > y <- c("abc","def",NA)
  7. > mode(y[2])
  8. [1] "character"
  9. > mode(y[3])
  10. [1] "character"
Source code

 

2 Utilisation de NULL
Une utilisation de NULL consiste à créer des vecteurs dans des boucles, dans lesquelles chaque itération ajoute un autre élément au vecteur. Dans cet exemple simple, nous construisons un vecteur de nombres pairs:
# construire un vecteur des nombres pairs en 1:10

  1. > z <- NULL
  2. > for (i in 1:10) if (i %%2 == 0) z <- c(z,i)
  3. > z
  4. [1] 2 4 6 8 10
Source code
Rappelez-vous à partir du chapitre 1 que %% est l'opérateur modulo, en donnant des restes à la division. Par exemple, 13% v 4 est égal à 1, le reste de la division 13 par 4 est 1. (Voir la section 7.2 pour une liste d'opérateurs arithmétiques et logiques). Ainsi, la boucle d'exemple commence par un vecteur NULL puis ajoute l'élément 2 à ce sujet, puis 4, et ainsi de suite.
C'est un exemple très artificiel, bien sûr, et il existe de meilleures façons de faire cette tâche particulière. Voici encore deux autres façons de trouver des nombres pairs en 1:10:
  1. > seq (2,10,2)
  2. [1] 2 4 6 8 10
  3. > 2 * 1: 5
  4. [1] 2 4 6 8 10
Source code
Mais le point ici est de démontrer la différence entre NA et NULL. Si nous utilisions NA au lieu de NULL dans l'exemple précédent, nous allons prendre une NA indésirable:
  1. > z <- NA
  2. > for (i in 1:10) if (i %%2 == 0) z <- c(z,i)
  3. > z
  4. [1] NA 2 4 6 8 10
Source code
Les valeurs NULL sont vraiment comptées comme inexistantes, comme vous pouvez le voir ici:
  1. > u <- NULL
  2. > length(u)
  3. [1] 0
  4. > v <- NA
  5. > length(v)
  6. [1] 1
Source code
NULL est un objet R spécial sans mode.