Como lidar com a Infinity em R

Em alguns casos, você não tem valores reais para calcular com. Na maioria dos conjuntos de dados da vida real em R, 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). Felizmente, R pode lidar com todas estas situações.

usando 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 (). Esta função lhe diz que os dois últimos resultados - 10 ^ 309 e 10 ^ 310 - são infinitos para R.

Lidar 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.

Lidar 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.

Cálculo, e os valores em falta indefinidos infinitos

A tabela a seguir fornece uma visão geral dos resultados das funções descritas acima. É improvável que você usar qualquer um desses, exceto para is.na (), que você pode usar muito!

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

menu