33

整数としての入力が必要な関数を使用していました。

だから私は物事を整数にすることについて読んでいます

y <- 3.14
as.integer(y)
[1] 3              # all cool

すべて良いですが、私が持っている場合

 x <- 1639195531833
 as.integer(x)
 [1] NA
 Warning message:
 NAs introduced by coercion 

私はそれを続けていoptions(digits = 15)て、なぜそれが機能しなかったのか混乱しましたが、クリーンなセッションでは、科学的記数法と関係があるに違いありません。

私もRをだまそうとしましたが、それは幸せではありませんでした。

  as.integer(as.character(x))
[1] 2147483647
Warning message:
inaccurate integer conversion in coercion 

科学的記数法を無効にして整数を取得するにはどうすればよいですか?

4

4 に答える 4

51

Rが保持できる最大の整数は

.Machine$integer.max
# [1] 2147483647

これは科学的記数法とは何の関係もなく、コンピューターが実際に数字を保存する方法と関係があります。Rの現在のバージョンは、アーキテクチャに関係なく、整数を32ビットとして格納します。ただし、これは将来変更される可能性があります。

も参照してください?as.integer

現在、int64パッケージを介して64ビット整数にアクセスできます。

> as.integer(.Machine$integer.max)
[1] 2147483647
> # We get problems with this
> as.integer(.Machine$integer.max + 1)
[1] NA
Warning message:
NAs introduced by coercion 
> # But if we use int64
> library(int64)
> as.int64(.Machine$integer.max) + 1L
[1] 2147483648
于 2013-01-29T18:10:24.107 に答える
2

大きな整数を処理できるクラスがあります。私はint64を使用しています。そのビネットはここにあります:

http://cran.r-project.org/web/packages/int64/vignettes/int64.pdf

これを使用するには、通常の数値をそのクラスに配置するだけで、通常の 32 ビット整数の最大値のしきい値を超えて加算または乗算できます。幸運を。

于 2013-01-29T18:14:41.880 に答える