我经常编写 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 中明确指定整数?不指定整数是否有任何潜在的负面影响?
问问题
189 次
2 回答
6
您问:
不指定整数是否有任何潜在的负面影响?
在某些情况下,它可能更重要。来自用于数据分析的钱伯斯软件p193:
只要整数的绝对值小于 2^m,即表示的小数部分的长度(32 位机器为 2^54),整数值将精确地表示为“双”数。
不难看出,如果您计算一个值,它可能看起来像一个整数,但并不完全是一个:
> (seq(-.45,.45,.15)*100)[3]
[1] -15
> (seq(-.45,.45,.15)*100)[3] == -15L
[1] FALSE
然而,很难想出一个显式输入整数的例子,并且在浮点表示中它不是一个整数,直到你得到钱伯斯描述的更大的值。
于 2012-11-26T04:17:42.033 回答
2
使用1L
etc 在编程上是安全的,因为它是明确的意思,并且不依赖于任何转换等。
当以交互方式编写代码时,很容易注意到错误并在此过程中进行修复,但是如果您正在编写一个包(甚至是 base R
),那么显式会更安全。
当您考虑相等时,使用浮点数会导致精度问题,请参阅此常见问题解答。
显式指定整数可以避免这种情况,因为nrow
和以及返回或需要整数length
的索引参数。apply
于 2012-11-26T03:44:11.527 回答