Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between integer class and numeric class in R

I want to preface this by saying I'm an absolute programming beginner, so please excuse how basic this question is.

I'm trying to get a better understanding of "atomic" classes in R and maybe this goes for classes in programming in general. I understand the difference between a character, logical, and complex data classes, but I'm struggling to find the fundamental difference between a numeric class and an integer class.

Let's say I have a simple vector x <- c(4, 5, 6, 6) of integers, it would make sense for this to be an integer class. But when I do class(x) I get [1] "numeric". Then if I convert this vector to an integer class x <- as.integer(x). It return the same exact list of numbers except the class is different.

My question is why is this the case, and why the default class for a set of integers is a numeric class, and what are the advantages and or disadvantages of having an integer set as numeric instead of integer.

like image 761
Keon Avatar asked May 14 '14 16:05

Keon


People also ask

How do numeric and integer classes differ in R?

If the data consists of only numbers, like decimals, whole numbers, then we call it NUMERIC DATA. In numeric data, the numbers can be positive or negative. If the data consists only of whole numbers, it is called as INTEGER. Integers too may take negative or positive values.

What is difference between integer and numeric?

There is no difference between a NUMERIC value which is an integer and an INTEGER value which is an INTEGER -- they are both INTEGER and behave exactly the same.

What is numeric class in R?

The "numeric" class in R has multiple classes grouped under it. The two most common among them are double (for double-precision floating-point numbers) class and integer class. R automatically converts between the numeric classes when needed.

What does integer mean in R?

Like the help page says, R's integer s are signed 32-bit numbers so can hold between -2147483648 and +2147483647 and take up 4 bytes. R's numeric is identical to an 64-bit double conforming to the IEEE 754 standard. R has no single precision data type.


2 Answers

There are multiple classes that are grouped together as "numeric" classes, the 2 most common of which are double (for double precision floating point numbers) and integer. R will automatically convert between the numeric classes when needed, so for the most part it does not matter to the casual user whether the number 3 is currently stored as an integer or as a double. Most math is done using double precision, so that is often the default storage.

Sometimes you may want to specifically store a vector as integers if you know that they will never be converted to doubles (used as ID values or indexing) since integers require less storage space. But if they are going to be used in any math that will convert them to double, then it will probably be quickest to just store them as doubles to begin with.

like image 126
Greg Snow Avatar answered Oct 19 '22 01:10

Greg Snow


Patrick Burns on Quora says:

First off, it is perfectly feasible to use R successfully for years and not need to know the answer to this question. R handles the differences between the (usual) numerics and integers for you in the background.

> is.numeric(1)  [1] TRUE  > is.integer(1)  [1] FALSE  > is.numeric(1L)  [1] TRUE  > is.integer(1L)  [1] TRUE 

(Putting capital 'L' after an integer forces it to be stored as an integer.)

As you can see "integer" is a subset of "numeric".

> .Machine$integer.max  [1] 2147483647  > .Machine$double.xmax  [1] 1.797693e+308 

Integers only go to a little more than 2 billion, while the other numerics can be much bigger. They can be bigger because they are stored as double precision floating point numbers. This means that the number is stored in two pieces: the exponent (like 308 above, except in base 2 rather than base 10), and the "significand" (like 1.797693 above).

Note that 'is.integer' is not a test of whether you have a whole number, but a test of how the data are stored.

One thing to watch out for is that the colon operator, :, will return integers if the start and end points are whole numbers. For example, 1:5 creates an integer vector of numbers from 1 to 5. You don't need to append the letter L.

> class(1:5) [1] "integer" 

Reference: https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R

like image 35
Rana Muhammad kashif Avatar answered Oct 19 '22 01:10

Rana Muhammad kashif