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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow