1. ホーム
  2. r

[解決済み] 1L`と`1`の違いは何ですか?

2022-04-21 06:35:39

質問

という記号をよく見かけます。 1L (または 2L , 3L など)がRコードに表示されます。 とはどう違うのでしょうか? 1L1 ? 1==1L は、次のように評価されます。 TRUE . なぜ 1L はRコードで使われているのですか?

どのように解決するのですか?

そこで、@James と @Brian は次のように説明しました。 3Lの意味。しかし なぜ を使うのでしょうか?

ほとんどの場合、違いはありません。しかし、時には、コードを より速く実行する を消費し メモリ削減 . double ("numeric") ベクターは、1つの要素につき8バイトを使用します。整数ベクトルでは、1要素あたり4バイトしか使いません。大きなベクトルでは、無駄なメモリが少なくなり、CPUが処理する量も少なくなります(つまり、一般的に速くなります)。

これは主にインデックスを扱うときに適用されます。 例えば、整数ベクトルに1を足すと2倍ベクトルになる例です。

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 整数の最大値が必要なときはいつでも(最小値のときはそれを否定して)。