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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow