首页 文章

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

提问于
浏览
62

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

我试图更好地理解R中的“原子”类,也许这适用于编程中的类 . 我理解字符,逻辑和复杂数据类之间的区别,但我很难找到数字类和整数类之间的根本区别 .

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

我的问题是为什么会出现这种情况,以及为什么一组整数的默认类是一个数字类,以及将整数设置为数字而不是整数的优点和缺点是什么 .

3 回答

  • 0

    有多个类组合在一起作为“数字”类,其中最常见的两个是double(对于双精度浮点数)和整数 . R将在需要时自动在数字类之间进行转换,因此对于临时用户而言,数字3当前是以整数还是以双精度存储并不重要 . 大多数数学运算使用双精度,因此通常是默认存储 .

    有时您可能希望将向量专门存储为整数,如果您知道它们永远不会转换为双精度(用作ID值或索引),因为整数需要较少的存储空间 . 但是如果它们将被用于将它们转换为双倍的任何数学,那么将它们作为双打开始可能是最快的 .

  • 55

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

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

    (在整数后面加上大写'L'会强制它存储为整数 . )

    如您所见,“整数”是“数字”的子集 .

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

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

    请注意,'is.integer'不是测试您是否拥有整数,而是测试数据的存储方式 .

    需要注意的一点是,如果起点和终点是整数,冒号运算符 : 将返回整数 . 例如, 1:5 创建一个从1到5的 integer 数字向量 . 您不需要附加字母 L .

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

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

  • 30

    据我所知 - 我们没有声明一个带有数据类型的变量,所以默认情况下,R设置任何不带L的数字都是数字 . 如果你写道:

    > x <- c(4L, 5L, 6L, 6L)
    > class(x)
    >"integer" #it would be correct
    

    整数示例:

    > x<- 2L
    > print(x)
    

    数字示例(类似于其他编程语言的double / float)

    > x<-3.4
    > print(x)
    

相关问题