Quero começar dizendo que sou totalmente iniciante em programação, então, desculpe o quão básica é essa pergunta.
Estou tentando obter um melhor entendimento das classes "atômicas" em R e talvez isso se aplique às classes de programação em geral. Eu entendo a diferença entre um caractere, classes de dados lógicos e complexos, mas estou lutando para encontrar a diferença fundamental entre uma classe numérica e uma classe de inteiro.
Digamos que eu tenha um vetor simples x <- c(4, 5, 6, 6)
de inteiros, faria sentido que fosse uma classe de inteiros. Mas quando eu faço, class(x)
eu consigo [1] "numeric"
. Então, se eu converter esse vetor em uma classe de inteiros x <- as.integer(x)
. Ele retorna a mesma lista exata de números, exceto pela classe ser diferente.
Minha pergunta é por que esse é o caso e por que a classe padrão para um conjunto de inteiros é uma classe numérica e quais são as vantagens e / ou desvantagens de ter um conjunto inteiro como numérico em vez de inteiro.
as.integer(c(4.1, 5.2, 6.3, 6.4))
ajudá-lo a compreender a diferença? Você precisa entender que a representação interna e o que é impresso não são iguais. De qualquer forma, leia um pouco sobre os tipos de dados em linguagens de computador.x <- 1; is.integer(x); is.numeric(x)
, então,x <- 1L; is.integer(x); is.numeric(x)
e você verá um pouco da diferença. Classes inteiras são mais usadas para passar variáveis de construções C e também em estruturas R. Porém, há muito mais nisso.Respostas:
Existem várias classes que são agrupadas como classes "numéricas", as 2 mais comuns das quais são duplas (para números de ponto flutuante de precisão dupla) e inteiras. R irá converter automaticamente entre as classes numéricas quando necessário, portanto, na maioria das vezes, não importa para o usuário casual se o número 3 está armazenado atualmente como um inteiro ou duplo. A maior parte da matemática é feita com precisão dupla, de modo que geralmente é o armazenamento padrão.
Às vezes, você pode querer armazenar especificamente um vetor como inteiros se souber que eles nunca serão convertidos em duplos (usados como valores de ID ou indexação), pois os inteiros requerem menos espaço de armazenamento. Mas se eles forem usados em qualquer matemática que os converterá em duplos, então provavelmente será mais rápido armazená-los apenas como duplos para começar.
fonte
Em primeiro lugar, é perfeitamente viável usar R com sucesso por anos e não precisar saber a resposta para essa pergunta. R trata das diferenças entre os números (usuais) e os inteiros para você em segundo plano.
(Colocar 'L' maiúsculo após um inteiro força-o a ser armazenado como um inteiro.)
Como você pode ver, "inteiro" é um subconjunto de "numérico".
Os inteiros vão para um pouco mais de 2 bilhões, enquanto os outros números podem ser muito maiores. Eles podem ser maiores porque são armazenados como números de ponto flutuante de precisão dupla. Isso significa que o número é armazenado em duas partes: o expoente (como 308 acima, exceto na base 2 em vez da base 10) e o "significando" (como 1.797693 acima).
Observe que 'is.integer' não é um teste para saber se você tem um número inteiro, mas um teste de como os dados são armazenados.
Uma coisa a ser observada é que o operador de dois pontos,,
:
retornará inteiros se os pontos inicial e final forem números inteiros. Por exemplo,1:5
cria uminteger
vetor de números de 1 a 5. Você não precisa anexar a letraL
.Referência: https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R
fonte
Para citar a página de ajuda (tente
?integer
), minha parte em negrito:Como diz a página de ajuda, os Rs
integer
são números de 32 bits com sinal, portanto, podem conter entre -2147483648 e +2147483647 e ocupar 4 bytes.R's
numeric
é idêntico a um 64 bits emdouble
conformidade com o padrão IEEE 754. R não possui um único tipo de dados de precisão. (fonte: páginas de ajuda denumeric
edouble
). Um double pode armazenar todos os inteiros entre -2 ^ 53 e 2 ^ 53 exatamente sem perder a precisão.Podemos ver os tamanhos dos tipos de dados, incluindo a sobrecarga de um vetor ( fonte ):
fonte
No meu entendimento - não declaramos uma variável com um tipo de dados, portanto, por padrão, R definiu qualquer número sem L como numérico. Se você escreveu:
Exemplo de inteiro:
Exemplo de numérico (tipo double / float de outras linguagens de programação)
fonte
1:5
criará inteiros.