Na

Nada em R

1 exercício

Sobre Nada

Muitas linguagens têm uma forma como null ou none de indicar um valor inexistente. Como o R foi projetado para lidar com grandes volumes de dados (muitas vezes bagunçados), ele tem várias formas de representar o nada.

O objetivo geral é sinalizar valores ausentes ou suspeitos conforme eles aparecem e depois continuar, sem gerar uma exceção.

NULL

Se um valor realmente não existe, ele é representado por NULL. Provavelmente é o mais próximo do que C ou Python fariam.

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

Em muitos contextos, valores NULL são simplesmente ignorados:

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

NA

Para situações em que um valor existe, mas não sabemos qual é, usa-se NA. Por exemplo, ao contar veículos que trafegam em uma estrada, os observadores humanos podem ficar doentes ou os sensores automáticos podem quebrar, mas o trânsito continua fluindo.

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

Assim, NA é um marcador que avisa às pessoas que elas precisam decidir como lidar com isso.

Funções estatísticas normalmente retornam NA por padrão se houver valores NA presentes. Se você quiser que esses valores sejam ignorados, use o parâmetro na.rm (NA remove) para deixar isso explícito:

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

NaN

Abreviação de "Not a Number" ("não é um número"), NaN sinaliza um problema de cálculo em situações em que se esperava um 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

Essa não é a única possibilidade de cálculo "inválido". Dividir por zero retorna Inf ou -Inf quando o numerador é diferente de zero, sem gerar um erro.

1 / 0
#> [1] Inf

Vetores vazios

Talvez surpreendentemente, o R não tem uma forma padrão de verificar se algo está vazio, embora alguns pacotes de terceiros implementem suas próprias funções, como is.empty().

Até mesmo gerar um vetor vazio não é totalmente óbvio. Vimos em uma seção anterior que c() sem argumentos retorna NULL, e não um vetor.

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

Funções como logical() ou integer() recebem um argumento que especifica o comprimento desejado, que pode ser zero.

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

Também podemos gerar um vetor e depois remover todos os elementos, como descrito no Conceito de Vetores. Isso resulta em um vetor de comprimento 0 de um tipo apropriado.

v <- 5
v[-1]  # delete the first element
#> numeric(0)
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Nada