Rコードにシンボル1L
(または2L
、3L
など)が表示されることがよくありました。 1L
と1
の違いは何ですか? 1==1L
はTRUE
と評価されます。 Rコードで1L
が使用されるのはなぜですか?
したがって、@ Jamesと@Brianはwhat 3Lの意味を説明しました。しかし、なぜ使用しますか?
ほとんどの場合、違いはありませんが、コードを使用してより高速に実行し、消費するメモリ不足。ダブル(「数値」)ベクトルは、要素ごとに8バイトを使用します。整数ベクトルは、要素ごとに4バイトのみを使用します。大きなベクトルの場合は、メモリの浪費が少なくなり、CPUの処理量が減ります(したがって、通常は高速になります)。
ほとんどの場合、これはインデックスを操作するときに適用されます。整数ベクトルに1を追加すると、それが二重ベクトルに変わる例を次に示します。
x <- 1:100
typeof(x) # integer
y <- x+1
typeof(y) # double, twice the memory size
object.size(y) # 840 bytes (on win64)
z <- x+1L
typeof(z) # still integer
object.size(z) # 440 bytes (on win64)
...また、整数を過度に使用すると危険な場合があることに注意してください。
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
...そして@Gavinが指摘したように、整数の範囲はおおよそ-2e9から2e9です。
ただし、これは現在のRバージョン(2.13)に適用されることに注意してください。 Rは、ある時点でこれを変更する場合があります(64ビット整数は、長さが2e9を超えるベクトルを有効にする可能性があります)。安全のために、最大整数値が必要なときはいつでも.Machine$integer.max
を使用する必要があります(最小値は無効にします)。
Lは、標準の数値クラスのdoubleではなく、整数型を指定します。
> str(1)
num 1
> str(1L)
int 1
定数の整数値を明示的に作成するには、as.integer関数を呼び出すか、単にサフィックス「L」を使用します。