我经常编写R代码,例如,我测试向量的长度,数据帧中的行数或矩阵的维数if (length(myVector) == 1).在一些基本的R代码中,我注意到在这种比较中,值被明确地表示为整数,例如通常使用'L'后缀if (nrow(data.frame) == 5L).显式整数有时也用于函数参数,例如cor函数中的这些语句:x <- matrix(x, ncol = 1L)和apply(u, 2L, rank, na.last = "keep").什么时候应该在R中明确指定整数?不指定整数会产生任何潜在的负面后果吗?
您询问:
不指定整数会产生任何潜在的负面后果吗?
在某些情况下,它可能更重要.来自钱伯斯软件数据分析 p193:
只要整数的绝对值小于2 ^ m(表示的小数部分的长度)(32位机器为2 ^ 54),整数值将精确表示为"双"数.
不难看出如果你计算一个它可能看起来像一个整数但不是一个整数的值:
> (seq(-.45,.45,.15)*100)[3]
[1] -15
> (seq(-.45,.45,.15)*100)[3] == -15L
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
然而,更难以提出一个明确键入一个整数并在浮点表示中出现不是一个整数的例子,直到你进入钱伯斯所描述的更大的值.
使用1Letc 在编程上是安全的,因为它的含义是明确的,并且不依赖于任何转换等。
当以交互方式编写代码时,很容易注意到错误并一路修复,但是如果您正在编写一个包(甚至是 base R),那么显式会更安全。
当您考虑相等时,使用浮点数会导致精度问题请参阅此常见问题解答。
显式指定整数可以避免这种情况,因为nrow和length以及索引参数apply返回或需要整数。