我的问题是:假设您已经计算了一个给出迭代次数的算法,并且您想打印出迭代次数。但输出总是有很多小数位,如下所示:
64.00000000
是否可以通过在 R 中进行类型转换来获得整数?你会怎么做??
我的问题是:假设您已经计算了一个给出迭代次数的算法,并且您想打印出迭代次数。但输出总是有很多小数位,如下所示:
64.00000000
是否可以通过在 R 中进行类型转换来获得整数?你会怎么做??
强制转换为整数模式存在一些问题。大概你在某种结构中有各种各样的数字。如果您正在使用矩阵,则打印例程将以相同的精度显示所有数字。如果您使用算术过程计算了此结果,则实际上可能小于 64 位显示为该值。
> 64.00000000-.00000099999
[1] 64
> 64.00000000-.0000099999
[1] 63.99999
因此,假设您希望它所属的任何结构中的所有值都显示为整数,最安全的方法是:
round(64.000000, 0)
...因为这可能会发生,否则。
> as.integer(64.00000000-.00000000009)
[1] 63
另一个问题是整数的值范围远小于浮点数的范围。
与其尝试将输出转换为整数,不如先找出为什么它不是整数,然后修复它。
您是否将其初始化为整数,例如num.iterations <- 0L
,或者num.iterations <- integer(1)
您是否错误地将其设置为0
(数字)?
当你增加它时,你是添加1
(一个数字)还是1L
(一个整数)?
如果您不确定,请检查您的代码并使用该class
函数检查变量的类型。
从根本上解决问题可以为您节省很多麻烦。它还可以使您的代码更高效,因为整数上的许多操作比数字更快(例如)。
该函数as.integer()
将数字截断为 0 阶,因此您必须添加 0.5 才能获得适当的近似值
dd<-64.00000000
as.integer(dd+0.5)
如果您有一个希望强制转换为整数矩阵的数字矩阵(例如,您正在从一个因子创建一组虚拟变量),as.integer(matrix_object)
则会将矩阵强制转换为一个向量,这不是您想要的。相反,您可以使用storage.mode(matrix_object) <- "integer"
矩阵形式来维护。