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

あなたは尋ねました:

整数を指定しないことによる潜在的な悪影響はありますか?

それがもっと重要になる可能性が高い状況があります。データ分析のためのChambersソフトウェアp193から:

整数の絶対値が表現の小数部分の長さである2^m(32ビットマシンの場合は2 ^ 54)未満である限り、整数値は正確に「double」数値として表されます。

値を計算した場合、整数のように見えるかもしれませんが、完全に1ではない可能性があることを理解するのは難しいことではありません。

> (seq(-.45,.45,.15)*100)[3]
[1] -15
> (seq(-.45,.45,.15)*100)[3] == -15L
[1] FALSE

ただし、Chambersが説明するより大きな値に入るまで、整数を明示的に入力し、浮動小数点表現で整数ではない例を思い付くのは困難です。

于 2012-11-26T04:17:42.033 に答える
2

etcの使用1Lは、意味が明示的であり、変換などに依存しないため、プログラムで安全です。

コードをインタラクティブに作成する場合、エラーに気づき、途中で修正するのは簡単ですが、パッケージ(ベースでもR)を作成している場合は、明示的にする方が安全です。

等式を検討している場合、浮動小数点数を使用すると精度の問題が発生します。このFAQを参照してください

整数を明示的に指定すると、これ、as nrow、および、および整数を返すか要求するlengthインデックス引数を回避できます。apply

于 2012-11-26T03:44:11.527 に答える