R Language
数値クラスと記憶モード
サーチ…
数値
数値は整数と倍数を表し、数値のベクトルに割り当てられるデフォルトモードです。関数is.numeric()
は、ベクトルが数値かどうかを評価します。整数とis.numeric()
を渡しますが、 as.numeric()
関数は常にdouble型に変換しようとします。
x <- 12.3
y <- 12L
#confirm types
typeof(x)
[1] "double"
typeof(y)
[1] "integer"
# confirm both numeric
is.numeric(x)
[1] TRUE
is.numeric(y)
[1] TRUE
# logical to numeric
as.numeric(TRUE)
[1] 1
# While TRUE == 1, it is a double and not an integer
is.integer(as.numeric(TRUE))
[1] FALSE
ダブルはRのデフォルトの数値です。これらは倍精度ベクタです。つまり、ベクタの各値に対して8バイトのメモリを占有します。 Rには単精度データ型がないため、すべての実数は倍精度形式で格納されます。
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
整数は、分数コンポーネントなしで記述できる整数です。整数は、後にLが付いた数字で表されます。それがダブルとみなされた後にLのない任意の数。
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
ほとんどの場合、整数または倍精度を使用しても問題はありませんが、倍精度を整数に置き換えると、メモリと操作時間が少なくなることがあります。ダブルベクトルは要素あたり8バイトを使用し、整数ベクトルは要素あたり4バイトのみを使用します。ベクトルのサイズが大きくなるにつれて、適切な型を使用するとプロセスが大幅にスピードアップする可能性があります。
# test speed on lots of arithmetic
microbenchmark(
for( i in 1:100000){
2L * i
10L + i
},
for( i in 1:100000){
2.0 * i
10.0 + i
}
)
Unit: milliseconds
expr min lq mean median uq max neval
for (i in 1:1e+05) { 2L * i 10L + i } 40.74775 42.34747 50.70543 42.99120 65.46864 94.11804 100
for (i in 1:1e+05) { 2 * i 10 + i } 41.07807 42.38358 53.52588 44.26364 65.84971 83.00456 100
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow