我的问题是:假设您已经计算出了一个算法,该算法给出了迭代次数,并且您希望打印出迭代次数。但输出总是很多小数位,如下所示:
64.00000000
是否可以通过在R中进行类型转换来获取整数?你会怎么做?
答案 0 :(得分:7)
不要试图将输出转换为整数,而是先找出它为什么不是整数,然后在那里修复它。
您是否将其初始化为整数,例如num.iterations <- 0L
或num.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"
来维护矩阵形式。