Como R Calcula infinito, indefinido, e valores ausentes

Felizmente, R pode lidar com anomalias de dados que confundem algumas outras plataformas estatísticos. Por exemplo, em alguns casos, você não tem valores reais para calcular com. Na maioria dos conjuntos de dados da vida real, de fato, pelo menos alguns valores estão faltando. Além disso, alguns cálculos têm como resultado o infinito (por exemplo, divisão por zero) ou não pode ser levada a cabo em todos os (tal como o logaritmo de um valor negativo).

Como R define o infinito

Para começar a explorar o infinito em R, ver o que acontece quando você tenta dividir por zero:

> 2/0 [1] Inf

R corretamente informa o resultado é Inf, ou infinito. infinito negativo como é mostrado -Inf. Você pode usar Inf assim como você usar um número real nos cálculos:

> 4 - Inf [1] -Inf

Para verificar se um valor é finito, use as funções is.finite () e is.infinite (). A primeira função retorna VERDADE se o número é finito o segundo retornos VERDADE Se o número é infinita.

R considera tudo maior do que o maior número de um computador pode conter a ser infinito - na maioria das máquinas, que é de aproximadamente 1,8 x 10308. Esta definição do infinito pode levar a resultados inesperados, conforme mostrado no exemplo a seguir:

> Is.finite (10 ^ (305: 310)) [1] verdadeiro verdadeiro verdadeiro verdadeiro FALSO FALSO

O que é que esta linha de código significa agora? Veja se você entender a nidificação e vetorização neste exemplo. Se você quebrar a linha a partir dos parênteses internos, torna-se compreensível:

  • Você já sabe que 305: 310 dá-lhe um vector, contendo os inteiros 305-310.

  • Todos os operadores são vetorizado, então 10 ^ (305: 310) dá-lhe um vector com os resultados de 10 elevado à potência de 305, 306, 307, 308, 309 e 310.

  • Isso vector é dado como um argumento para is.finite (). Essa função diz-lhe que os dois últimos resultados - 10 ^ 308 e 10 ^ 309 - são infinitos para R.

Como R lida com resultados indefinidos

Seu professor de matemática, provavelmente, explicou que se você dividir qualquer número real pelo infinito, você obtém zero. Mas o que se você dividir o infinito pelo infinito?

> Inf / Inf [1] NaN

Bem, R indica que o resultado é NaN. Esse resultado significa simplesmente Não é um número. Esta é a maneira de dizer-lhe que o resultado desse cálculo não está definido de R.

O engraçado é que R realmente considera NaN para ser numérico, assim você pode usar NaN nos cálculos. O resultado desses cálculos é sempre NaN, porém, como você pode ver aqui:

> 4 + NaN [1] NaN

Você pode testar se o cálculo resulta em NaN usando o is.nan () função. Note-se que tanto is.finite () e is.infinite () Retorna FALSO quando você está testando em um NaN valor.

Como R lida com valores em falta

Um dos problemas mais comuns em estatística é conjuntos de dados incompletos. Para lidar com valores em falta, R usa a palavra-chave reservada N / D, que significa Não disponível. Você pode usar N / D como um valor válido, para que possa atribuí-lo como um valor, bem como:

> x lt; - NA

Tem que ter em conta, no entanto, que os cálculos de valor N / D Também geralmente retornam N / D como um resultado:

> X + 4 [1] NA> log (x) [1] NA

Se você quiser testar se um valor é N / D, você pode usar o is.na () função, como segue:

> Is.na (X) [1] VERDADEIRO

Note-se que o is.na () função também retorna VERDADE Se o valor está NaN. as funções is.finite (), is.infinite (), e is.nan () Retorna FALSO para N / D valores.

FunçãoInf-InfNaNN / D
is.finite ()FALSOFALSOFALSOFALSO
is.infinite ()VERDADEVERDADEFALSOFALSO
is.nan ()FALSOFALSOVERDADEFALSO
is.na ()FALSOFALSOVERDADEVERDADE

menu