如何在R中将双精度数转换为整数?

19
我的问题是:假设您计算出一个算法可以给出迭代次数,并且您想要将迭代次数打印出来。但是输出结果总是包含很多小数位,例如以下内容:
64.00000000

在R中,通过类型转换得到整数是可能的吗?你会如何做?


5
as.integer(64.000)查看?as.integer - Brandon Bertelsen
4个回答

13

在将值强制转换为整数模式时有一些需要注意的地方。假设您有某种结构中的各种数字。如果您正在使用矩阵,则打印例程将以相同的精度显示所有数字。但是,您可以更改该级别。如果您使用算术过程计算此结果,则它实际上可能小于以64位显示的值。

> 64.00000000-.00000099999
[1] 64
> 64.00000000-.0000099999
[1] 63.99999

假设您希望在该结构的所有值中,以整数形式显示,请使用以下最安全的方式:

round(64.000000, 0)

否则,由于可能发生这种情况。

> as.integer(64.00000000-.00000000009)
[1] 63

另一个需要注意的是,整数的取值范围要比浮点数小得多。

函数is.integer可用于测试整数模式。

is.integer(3)
[1] FALSE
is.integer(3L)
[1] TRUE

无论是round还是trunc函数都不会返回整数模式下的向量:

is.integer(trunc(3.4))
[1] FALSE

as.integer() 和 trunc() 有什么区别? - skan

8
不要试图将输出转换为整数,先找出为什么它不是整数,然后在那里修复。
你是否初始化它为整数,例如 num.iterations <- 0Lnum.iterations <- integer(1),或者你犯了将其设置为数字的错误,如 0
当你增加它时,你是添加了一个数字 1 还是一个整数 1L
如果不确定,请通过使用 class 函数检查变量的类型来查看代码。
在根部修复问题可能会为您省去很多麻烦。它还可以使您的代码更有效率,因为许多操作对整数比数字快(一个例子)。

6
函数as.integer()将数字截断至0阶,因此您必须添加0.5以获得适当的近似值。
dd<-64.00000000
as.integer(dd+0.5)

4
如果您有一个数字矩阵需要强制转换为整数矩阵(例如,您正在从因子创建一组虚拟变量),as.integer(matrix_object)会将矩阵强制转换为向量,这不是您想要的。相反,您可以使用storage.mode(matrix_object) <- "integer"来保持矩阵形式。

这是一个非常重要的区别。 - irritable_phd_syndrome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接