我想说这是一个绝对的编程初学者,所以请原谅这个问题是多么基本 .
我试图更好地理解R中的“原子”类,也许这适用于编程中的类 . 我理解字符,逻辑和复杂数据类之间的区别,但我很难找到数字类和整数类之间的根本区别 .
假设我有一个简单的整数向量 x <- c(4, 5, 6, 6)
,这对于整数类是有意义的 . 但当我做 class(x)
时,我得到 [1] "numeric"
. 然后,如果我将此向量转换为整数类 x <- as.integer(x)
. 除了类不同之外,它返回相同的精确数字列表 .
我的问题是为什么会出现这种情况,以及为什么一组整数的默认类是一个数字类,以及将整数设置为数字而不是整数的优点和缺点是什么 .
3 回答
有多个类组合在一起作为“数字”类,其中最常见的两个是double(对于双精度浮点数)和整数 . R将在需要时自动在数字类之间进行转换,因此对于临时用户而言,数字3当前是以整数还是以双精度存储并不重要 . 大多数数学运算使用双精度,因此通常是默认存储 .
有时您可能希望将向量专门存储为整数,如果您知道它们永远不会转换为双精度(用作ID值或索引),因为整数需要较少的存储空间 . 但是如果它们将被用于将它们转换为双倍的任何数学,那么将它们作为双打开始可能是最快的 .
首先,多年来成功使用R是完全可行的,不需要知道这个问题的答案 . R在后台处理(通常)数字和整数之间的差异 .
(在整数后面加上大写'L'会强制它存储为整数 . )
如您所见,“整数”是“数字”的子集 .
整数只有20多亿,而其他数字可能要大得多 . 它们可以更大,因为它们存储为双精度浮点数 . 这意味着该数字存储在两个部分中:指数(如上面的308,除了基数2而不是基数10),以及“有效数”(如上面的1.797693) .
请注意,'is.integer'不是测试您是否拥有整数,而是测试数据的存储方式 .
需要注意的一点是,如果起点和终点是整数,冒号运算符
:
将返回整数 . 例如,1:5
创建一个从1到5的integer
数字向量 . 您不需要附加字母L
.参考:https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R
据我所知 - 我们没有声明一个带有数据类型的变量,所以默认情况下,R设置任何不带L的数字都是数字 . 如果你写道:
整数示例:
数字示例(类似于其他编程语言的double / float)