11

我经常编写 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 中明确指定整数?不指定整数是否有任何潜在的负面影响?

4

2 回答 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

使用1Letc 在编程上是安全的,因为它是明确的意思,并且不依赖于任何转换等。

当以交互方式编写代码时,很容易注意到错误并在此过程中进行修复,但是如果您正在编写一个包(甚至是 base R),那么显式会更安全。

当您考虑相等时,使用浮点数会导致精度问题,请参阅此常见问题解答

显式指定整数可以避免这种情况,因为nrow和以及返回或需要整数length的索引参数。apply

于 2012-11-26T03:44:11.527 回答