R Language
Numeriska klasser och lagringslägen
Sök…
Numerisk
Numeric representerar heltal och fördubblar och är standardläget tilldelat vektorvektorer. Funktionen is.numeric()
kommer att utvärdera om en vektor är numerisk. Det är viktigt att notera att även om heltal och dubbletter kommer att passera is.numeric()
, kommer funktionen as.numeric()
alltid att försöka konvertera till typen 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
Dubblar är R: s standardvärde. De är dubbla precisionsvektorer, vilket innebär att de tar upp 8 byte minne för varje värde i vektorn. R har ingen enda precisionsdatatyp och därför lagras alla verkliga nummer i det dubbla precisionsformatet.
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
Heltal är heltal som kan skrivas utan en bråkdel. Heltal representeras av ett nummer med en L efter det. Alla siffror utan L efter det kommer att betraktas som en dubbel.
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
Men i de flesta fall spelar inte ett heltal eller ett dubbelt spel, ibland kommer byte av dubbel med heltal att konsumera mindre minne och driftstid. En dubbelvektor använder 8 byte per element medan en heltalvektor endast använder 4 byte per element. När vektorns storlek ökar kan användning av lämpliga typer dramatiskt påskynda processer.
# 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