R Language
Clases numéricas y modos de almacenamiento.
Buscar..
Numérico
Numérico representa enteros y dobles y es el modo predeterminado asignado a vectores de números. La función is.numeric()
evaluará si un vector es numérico. Es importante tener en cuenta que aunque los enteros y los dobles pasarán por is.numeric()
, la función as.numeric()
siempre intentará convertir al 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
Los dobles son el valor numérico por defecto de R. Son vectores de doble precisión, lo que significa que ocupan 8 bytes de memoria para cada valor en el vector. R no tiene un solo tipo de datos de precisión, por lo que todos los números reales se almacenan en el formato de doble precisión.
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
Los enteros son números enteros que se pueden escribir sin un componente fraccional. Los enteros están representados por un número con una L después de él. Cualquier número sin una L después será considerado doble.
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
Aunque en la mayoría de los casos el uso de un entero o un doble no importará, a veces reemplazar los dobles con enteros consumirá menos memoria y tiempo de operación. Un vector doble usa 8 bytes por elemento, mientras que un vector entero usa solo 4 bytes por elemento. A medida que aumenta el tamaño de los vectores, el uso de tipos adecuados puede acelerar dramáticamente los procesos.
# 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