R中的整数类和数字类有什么区别?

我想通过说我是一个绝对的编程初学者,所以请原谅这个问题是多么的基本。

我试图更好地理解R中的“primefaces”类,也许这通常是编程中的类。 我理解字符,逻辑和复杂数据类之间的区别,但是我正在努力寻找数字类和整数类之间的根本区别。

假设我有一个简单的向量x <- c(4, 5, 6, 6) 4,5,6,6 x <- c(4, 5, 6, 6)的整数,这是有道理的,因为这是一个整数类。 但是当我做class(x)我得到[1] "numeric" 。 然后,如果我将这个向量转换为整数类x <- as.integer(x) 。 它返回相同的确切的数字列表,除了类是不同的。

我的问题是,为什么这是这种情况,为什么一组整数的默认类是一个数字类,有一个整数设置为数字而不是整数的优点和缺点。

有多个类被归类为“数字”类,其中最常见的2个是double(对于双精度浮点数)和整数。 R在需要的时候会自动在数字类之间进行转换,所以对于大多数用户来说,数字3当前是以整数还是双精度存储并不重要。 大多数math是使用双精度完成的,所以这通常是默认存储。

有时候,如果你知道它们永远不会被转换为双精度(用作ID值或索引),因为整数需要更less的存储空间,所以你可能希望专门存储一个整数。 但是,如果他们将被用于任何将其转化为双倍的math,那么将它们存储为双打开始可能是最快的。

首先,多年来成功使用R是完全可行的,而不需要知道这个问题的答案。 R在后台处理(通常)数字和整数之间的差异。

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

(在整数之后放置大写“L”会强制将其存储为整数。)

正如你所看到的“整数”是“数字”的一个子集。

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

整数只有20多亿,而其他的数字可以更大。 它们可以更大,因为它们被存储为双精度浮点数。 这意味着数字被存储在两个部分:指数(如上面308,除了基数2,而不是基数10)和“有效数”(如上面的1.797693)。

请注意,“is.integer”不是testing您是否有整数,而是testing数据如何存储。

有一点需要注意的是,如果开始点和结束点都是整数,冒号运算符:将返回整数。 例如, 1:5创build一个从1到5的integer向量。您不需要附加字母L

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

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