3.8 Valores especiais

Vimos anteriormente que se você tentar acessar uma posição que não existe dentro de um vetor, ele retorna um valor estranho.

Esse valor, o NA, é tratado de forma especial no R. Ele representa a ausência de informação, isto é, a informação existe, mas nós (e o R) não sabemos qual é.

O NA para o R nada mais é do que o valor faltante ou omisso da Estatística. O famoso missing. Geralmente, quando temos uma base com valores faltando, como a idade para alguns indivíduos da nossa amostra, não significa que a idade deles não existe. Significa apenas que não temos essa informação.

Esse conceito é muito importante para entender o resultado da expressão abaixo.

Em um primeiro momento, poderíamos esperar que o resultado fosse TRUE. Mas, sabendo o significado por trás do NA — um valor desconhecido —, a verdadeira pergunta que estamos fazendo é: 5 é igual a um valor que existe, mas que não sei qual é? É como se eu perguntasse se eu tenho 5 moedas na mão, mas lhe mostrasse a mão fechada. A resposta para isso é não sei ou, dentro do R, NA.

Um outro exemplo:

Eu posso saber a idade da Ana, mas se eu não souber a idade do Beto, não sei se os dois tem a mesma idade. Por isso, NA. Da mesma forma, se não sei nem a idade do Beto nem da Carla, também não tenho como saber se os dois têm a mesma idade. Outra vez NA.

Mas e quando queremos saber se um valor é NA ou não? Para fazer esse teste, temos que rodar is.na(valor-ou-objeto).

Repare que essa função também é vetorizada.

Assim como o NA, existem outros valores especiais muito comuns no R.

O NaN (not a number) representa indefinições matemáticas.

O Inf (infinito) representa um número muito grande (que o computador não consegue representar) ou um limite matemático.

O NULL (nulo) representa a ausência de um objeto. Ele não tem significado prático para a análise dados. Está mais em sintonia com comportamentos de lógica de programação. Muitas vezes vamos definir um objeto como nulo para dizer ao R que não queremos dar um valor para ele. Muito utilizado em funções (ver Seção 3.11).

Da mesma forma que utilizados is.na() para testar se um objeto é NA, utilizamos is.nan(), is.infinite() ou is.null() para testar se um objeto é NaN, infinito ou nulo.

Exercícios

1. Quais as diferenças entre NaN, NULL, NA e Inf? Digite expressões que retornem cada um desses valores.


Curso-R