Tracks
/
R
R
/
Temario
/
La nada
La

La nada en R

1 ejercicio

Acerca de La nada

Muchos lenguajes tienen una forma como null o none para indicar un valor inexistente. Como R está diseñado para manejar grandes volúmenes de datos (a menudo desordenados), tiene varias formas de representar la nada.

El objetivo general es marcar los valores faltantes o sospechosos a medida que se encuentran, y luego continuar sin lanzar una excepción.

NULL

Si un valor realmente no existe, se representa con NULL. Esto es probablemente lo más parecido a lo que harían C o Python.

v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE

En muchos contextos, los valores NULL simplemente se ignoran:

c(2, 3, NULL, 5)
#> [1] 2 3 5

NA

Para situaciones en las que un valor existe pero no sabemos cuál es, se usa NA. Por ejemplo, al contar los vehículos que circulan por una carretera, puede que los observadores humanos se enfermen o que los sensores automáticos fallen, pero el tráfico sigue fluyendo.

v <- c(1, 2, NA, 4, 5)
v
#> [1]  1  2 NA 4  5
is.na(v) # test for data gaps
#> [1] FALSE FALSE  TRUE FALSE FALSE

Así, NA es un marcador de posición que les advierte a las personas que deben decidir cómo manejarlo.

Las funciones estadísticas normalmente devuelven NA de forma predeterminada si hay valores NA. Si quieres que estos valores se ignoren, usa el parámetro na.rm (quitar NA) para dejarlo explícito:

v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3

NaN

Abreviatura de «Not a Number», o «no es un número», NaN señala un problema de cálculo en situaciones donde se esperaba un número.

n <- c(0, 2, 4)
d <- c(0, 1, 2)
n / d
#> [1] NaN   2   2  # 0/0 is mathematically undefined
is.nan(n / d)
#> [1]  TRUE FALSE FALSE

Esta no es la única posibilidad para los cálculos «inválidos». Dividir entre cero devuelve Inf o -Inf cuando el numerador no es cero, sin lanzar un error.

1 / 0
#> [1] Inf

Vectores vacíos

Quizá te sorprenda que R no tenga una forma estándar de comprobar si algo está vacío, aunque algunos paquetes de terceros implementan sus propias funciones, como is.empty().

Incluso generar un vector vacío no es del todo obvio. Vimos en una sección anterior que c() sin argumentos devuelve NULL, no un vector.

is.vector(c())
#> [1] FALSE

Funciones como logical() o integer() reciben un argumento que especifica la longitud deseada, que puede ser cero.

z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0

También podemos generar un vector y luego eliminar todos sus elementos, como se describe en el concepto de vectores. Esto da como resultado un vector de longitud 0 del tipo adecuado.

v <- 5
v[-1]  # delete the first element
#> numeric(0)
Editar en GitHub El enlace se abre en una ventana o pestaña nueva

Aprende La nada