16

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

64.00000000

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

4

4 回答 4

11

强制转换为整数模式存在一些问题。大概你在某种结构中有各种各样的数字。如果您正在使用矩阵,则打印例程将以相同的精度显示所有数字。如果您使用算术过程计算了此结果,则实际上可能小于 64 位显示为该值。

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

因此,假设您希望它所属的任何结构中的所有值都显示为整数,最安全的方法是:

round(64.000000, 0)

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

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

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

于 2012-11-03T01:15:14.530 回答
8

与其尝试将输出转换为整数,不如先找出为什么它不是整数,然后修复它。

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

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

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

从根本上解决问题可以为您节省很多麻烦。它还可以使您的代码更高效,因为整数上的许多操作比数字更快(例如)。

于 2012-11-03T01:57:03.700 回答
6

该函数as.integer()将数字截断为 0 阶,因此您必须添加 0.5 才能获得适当的近似值

dd<-64.00000000
as.integer(dd+0.5)
于 2014-02-24T22:49:09.793 回答
3

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

于 2017-04-18T20:22:28.537 回答