R Language
Classi numeriche e modalità di archiviazione
Ricerca…
Numerico
Numeric rappresenta numeri interi e doppi ed è la modalità predefinita assegnata ai vettori di numeri. La funzione is.numeric()
valuterà se un vettore è numerico. È importante notare che sebbene gli interi e i doppi passino is.numeric()
, la funzione as.numeric()
tenterà sempre di convertire in tipo 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
Il doppio è il valore numerico predefinito di R. Sono vettori a doppia precisione, il che significa che occupano 8 byte di memoria per ogni valore nel vettore. R non ha un singolo tipo di dati di precisione e quindi tutti i numeri reali sono memorizzati nel formato a doppia precisione.
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
Gli interi sono numeri interi che possono essere scritti senza una componente frazionale. I numeri interi sono rappresentati da un numero con una L dopo di esso. Qualsiasi numero senza una L dopo di esso sarà considerato un doppio.
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
Anche se nella maggior parte dei casi l'uso di un numero intero o doppio non ha importanza, a volte la sostituzione di doppi con numeri interi consuma meno memoria e tempo operativo. Un vettore doppio utilizza 8 byte per elemento mentre un vettore intero utilizza solo 4 byte per elemento. Con l'aumentare delle dimensioni dei vettori, l'utilizzo di tipi appropriati può accelerare notevolmente i processi.
# 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