1. ホーム
  2. r

[解決済み】Rの整数オーバーフローとは何ですか、そしてどのように起こるのですか?

2022-02-10 03:11:57

質問内容

計算中、以下のような警告が表示されます(エラーではありません)。

Warning messages:
1: In sum(myvar, na.rm = T) :
Integer overflow - use sum(as.numeric(.))

この中で スレッド の人々は、整数のオーバーフローは単に起こらないと述べています。Rがモダンすぎるか、彼らが正しくないかのどちらかです。しかし、私はここで何をすればいいのでしょうか?もし私が as.numeric 警告にあるように、私は情報がずっと前に失われているという事実を考慮に入れていないかもしれません。 myvar は.csvファイルから読み込まれるので、Rはもっと大きなフィールドが必要であることを理解するはずではありませんか?すでに何かを切り取っているのでしょうか?

の最大長はどのくらいですか? integer または numeric ? 他のフィールドタイプ/モードはありますか?

編集部:実行します。

R バージョン 2.13.2 (2011-09-30) プラットフォーム:x86_64-apple-darwin9.8.0/x86_64 (64bit) R Studio内

解決するには?

ヘルプページをご覧いただくと、多くの疑問が解決されると思います。 ?integer . と書いてありますね。

Rは整数ベクトルに32ビット整数を使用します。 表現可能な整数は約±2*10^9に制限されています。

より大きな整数への拡張はR Coreで検討中ですが、近い将来に実現することはないでしょう。

もし、quot;bignum" の容量が必要なら、Martin Maechler の Rmpfrパッケージ [PDF]をご覧ください。Rmpfr」パッケージは、作者の評判が良いのでおすすめです。Martin Maechlerは、Matrixパッケージの開発にも深く関わっており、R Coreにも関わっています。gmp'、'Brobdingnag'、'Ryacas'などの演算パッケージ(後者は記号演算インターフェースも提供しています)などもあります。

次に、リンク先の回答にある批判的なコメントへの対応と、自分の仕事との関連性をどう評価するかですが、次のように考えてみてください。もし、これらの"modern"言語の1つにRと同じ統計機能があれば、おそらくその方向へユーザーが移動することでしょう。しかし、今のところ、Rの方向への移行が進んでいると言えるでしょう。Rは統計学者によって統計のために作られました。

一時期、Lispの亜種で統計パッケージのXlisp-Statがありましたが、その主な開発者・提案者は現在R-Coreのメンバーになっています。一方、初期のR開発者の一人であるRoss Ihakaは。 Lispライクな言語での開発を目指すことを提案しています。 [PDF]をご覧ください。Clojure(英語ではクロージャと発音します)と呼ばれるコンパイルされた言語があり、Rincanterという実験的なインターフェイスがあります。

更新情報

新しいバージョンの R (3.0.+) では、53 ビットの整数がソートされるようになりました ( numeric 仮数)。ベクトル要素に '.Machine$integer.max' を超える値が割り当てられた場合、ベクトル全体が "numeric" (別名 "double") に強制されます。の最大値は integers のままですが、以前はオーバーフローが発生していたようなケースで、精度を保つために整数ベクトルを2倍に強制することがあるかもしれません。残念ながら,リスト,行列や配列の次元,ベクタの長さはまだ integer.max .

ファイルから大きな値を読み込む場合は、character-classをターゲットにしてから操作した方が無難でしょう。NA値への強制がある場合は、警告が出ます。