Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R内部是否将数字视为双倍?_R_Integer_Double - Fatal编程技术网

R内部是否将数字视为双倍?

R内部是否将数字视为双倍?,r,integer,double,R,Integer,Double,R是否主要将数字视为双倍 下面的代码表明R将数字视为双精度。即使我把它设为整数,经过一些计算,它也很容易变成双倍。(代码1) 此外,即使结果看起来像整数,内部也被视为double。(代码2) 我的理解正确吗 代码1: >类型(5) [1] “双倍” >类型(5/1) [1] “双倍” >typeof(作为整数(c(1,2,3))) [1] “整数” >类型(如整数(c(1,2,3))+1) [1] “双倍” >typeof(作为整数(c(1,2,3))/1) [1] “双倍” 代码2: >1+

R是否主要将数字视为双倍

下面的代码表明R将数字视为双精度。即使我把它设为整数,经过一些计算,它也很容易变成双倍。(代码1)

此外,即使结果看起来像整数,内部也被视为double。(代码2)

我的理解正确吗

代码1:

>类型(5)
[1] “双倍”
>类型(5/1)
[1] “双倍”
>typeof(作为整数(c(1,2,3)))
[1] “整数”
>类型(如整数(c(1,2,3))+1)
[1] “双倍”
>typeof(作为整数(c(1,2,3))/1)
[1] “双倍”
代码2:

>1+2
[1] 3
>类型(1+2)
[1] “双倍”

要使一个数字从一开始就是一个整数,请将
L
添加到该数字中:

typeof(1L)
# [1] "integer"
但是,使用32位整数存在危险:

2e9L
# [1] 2000000000
2e9L + 2e9L
# [1] NA
# Warning message:
# In 2000000000L + 2000000000L : NAs produced by integer overflow

R以不同的方式处理数字。在R中,整数和双精度浮点都默认为其32位版本

正如安德烈所指出的,R中有两种不同类型的数字

  • 文字
    1L,2L,3L,….
    ,这相当于
    as.integer(1)
  • 正则数(1,2,3.4,任何真正的数字)
  • 以及他们复杂的对手

    文字本身就是整数

    typeof(1)  #double
    class(1)   #numeric
    typeof(1L) #integer
    class(1L)  #integer
    
    定义明确。但是,在计算时,如果计算的任何部分未存储为小于或等于整数的类型,则它将自动转换为双精度:

    typeof(1L + 1L)   #integer
    typeof(1L + 1)    #double
    typeof(1L + TRUE) #integer
    typeof(1L * 3)    #double
    typeof(1L * 3L)   #integer
    
    但是,应该注意,与Python3.x相比,R使用32位变量运行时,这些变量的范围有限。但是,您可以通过使用64位整数的软件包
    bit64
    Rmpfr
    绕过32位变量(在大多数情况下!),该软件包提供了一个任意浮点精度的接口(根据其文档)。

    请阅读。可能重复的