R Language
Numerieke klassen en opslagmodi
Zoeken…
numerieke
Numeriek vertegenwoordigt gehele getallen en verdubbelt en is de standaardmodus die wordt toegewezen aan vectoren van getallen. De functie is.numeric()
zal evalueren of een vector numeriek is. Het is belangrijk op te merken dat hoewel gehele getallen en dubbele is.numeric()
worden doorgegeven, is. is.numeric()
, de functie as.numeric()
altijd zal proberen om te zetten naar dubbel type.
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
Dubbels zijn de standaard numerieke waarde van R. Het zijn dubbele precisievectoren, wat betekent dat ze 8 bytes geheugen innemen voor elke waarde in de vector. R heeft geen enkel precisiegegevenstype en dus worden alle reële getallen opgeslagen in het dubbele precisie-formaat.
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
Gehele getallen zijn hele getallen die kunnen worden geschreven zonder een fractionele component. Gehele getallen worden weergegeven door een getal met een L ernaast. Elk getal zonder een L erna wordt als een dubbel beschouwd.
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
Hoewel het in de meeste gevallen niet erg is om een geheel getal of een dubbele waarde te gebruiken, kost het vervangen van dubbele waarden door gehele getallen minder geheugen en operationele tijd. Een dubbele vector gebruikt 8 bytes per element, terwijl een gehele vector slechts 4 bytes per element gebruikt. Naarmate de grootte van vectoren toeneemt, kan het gebruik van de juiste typen processen dramatisch versnellen.
# 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