Diferencia entre NA y NULL en R

Los programadores de leguanjes como C, C++, PHP, etc. estamos acostumbrados a trabajar con el valor NULL, sin embargo en el caso de R tenemos dos valores diferentes: NA y NULL.

NA: indica la presencia de un dato pero del cual se desconoce su valor. Podríamos decir que existe un puntero a una posición de memoria pero se desconoce qué valor se almacena en dicha posición.

NULL: en este caso se indica la ausencia del dato, es decir, lo más parecido a otros lenguajes como C++. Se utiliza para emplazar una variable en el entorno de R pero sin valor, como por ejemplo para inicializar un vector que se va a utilizar como vector incremental.

 

Veamos unos ejemplos simples para aclararlo:

Si asignamos a dos variables var1 y var2 los valores NA y NULL respectivamente, el resultado es el siguiente:

var1 devuelve [1] NA y var2 devuelve NULL, es decir que var1 es un vector de un elemento con valor NA, mientras que var2 no es nada, aunque ya existe en el entorno de R, y por tanto se puede trabajar con dicha variable.

 

Si sumamos 1 a las variables anteriores, los resultados son:

 

Es decir, que la variable var3 devuelve un error porque no ha sido definida en el entorno de R, mientras que var2 no devuelve tal error.

 

En el caso de realizar operaciones vectorizadas, como por ejemplo la suma de un vector, si existe un elemento NA, el resultado será NA, mientras que si existe un valor NULL, R lo omite en el cálculo.

Veamos un ejemplo con la función mean() y dos vectores:

Como podemos ver, en el primer caso no se puede calcular la media del vector ya que se desconoce el valor de uno de los datos, mientras que en el segundo caso se omite y la media es 2. Algunos piensan que NULL se toma como valor 0, pero no es así. Si fuera así, la media sería 1.6 en vez de 2.

Por último veamos lo que devuelve la función length():

Definitivamente, NA existe como valor mientras que NULL no.

 

Como ya he comentado anteriormente, NULL es necesario utilizarlo para inicializar un vector que posteriormente se va a ir llenando de elementos en un bucle. Esta práctica no es buena debido a que provoca que R tenga que asignarle una nueva dirección de memoria al vector en cada iteración, sin embargo es una operación válida. Un ejemplo de lo que comento es el siguiente, donde se agregan dos elementos a cada uno de los vectores:

Como vemos, en los dos primeros casos hay un elemento adicional, 0 y NA respectivamente, por lo que ninguno de los dos valen para realizar esta inicialización. Es necesario recurrir a NULL.

 
 

Post Tagged with , ,

Comentarios y Respuestas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">