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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow