如何在R中将double转换为整数?

时间:2012-11-03 00:05:46

标签: r

我的问题是:假设您已经计算出了一个算法,该算法给出了迭代次数,并且您希望打印出迭代次数。但输出总是很多小数位,如下所示:

64.00000000

是否可以通过在R中进行类型转换来获取整数?你会怎么做?

4 个答案:

答案 0 :(得分:7)

不要试图将输出转换为整数,而是先找出它为什么不是整数,然后在那里修复它。

您是否将其初始化为整数,例如num.iterations <- 0Lnum.iterations <- integer(1)或您是否错误地将其设为0(数字)?

当你增加它时,你添加了1(数字)还是1L(整数)?

如果您不确定,请使用class函数检查代码并检查变量的类型。

在根目录下修复问题可以为您节省很多麻烦。它还可以使您的代码更有效,因为许多操作在整数上比数字更快(an example)。

答案 1 :(得分:6)

有一些陷入整数模式的陷阱。据推测,你在某种结构中有各种各样的数字。如果使用矩阵,则打印例程将以相同的精度显示所有数字。如果您使用算术过程计算了此结果,则实际上该值可能小于64位。

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

所以假设你想要所有结构中的所有值,作为整数显示,最安全的是:

round(64.000000, 0)

...因为这可能发生,否则。

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

另一个问题是整数的值范围远小于浮点数的范围。

答案 2 :(得分:4)

函数as.integer()截断数字最多为0的顺序,因此您必须添加0.5以获得正确的约

dd<-64.00000000
as.integer(dd+0.5)

答案 3 :(得分:0)

如果你有一个数字矩阵,你希望强制转换为一个整数矩阵(例如,你是从一个因子创建一组虚拟变量),as.integer(matrix_object)会将矩阵强制转换为一个向量,这不是什么你要。相反,您可以使用storage.mode(matrix_object) <- "integer"来维护矩阵形式。