Tipos de datos en R

Introducción a R Conceptos básicos de R
Aprende sobre los distintos tipos de datos en R

Todo en el lenguaje de programación R es un objeto. Cuando hablamos de tipos de datos en R, nos referimos a los objetos de datos más simples que podemos manejar, que también se conocen como tipos de datos atómicos.

Datos atómicos en R

Los tipos de datos atómicos son los tipos de objetos con los que puedes crear vectores (atómicos). Los tipos de datos más comunes en R son los que se enumeran en la siguiente lista:

  • Numérico: enteros y double (real).
  • Carácter.
  • Lógico.
  • Complejo.
  • Raw.

Puedes verificar si algún objeto de datos es atómico con la función is.atomic. Ten en cuenta que esta función verifica el tipo de datos de vectores atómicos.

is.atomic(3) # TRUE
is.atomic("R CODER") # TRUE

En las siguientes secciones mostraremos cómo verificar el tipo de datos de un objeto en R y explicaciones sobre cada tipo de datos.

Comprobar el tipo de dato

Hay varias funciones que pueden imprimir el tipo de dato de un objeto de R. Estas incluyen: typeof, mode, storage.mode, class y str.

# Tipo interno o modo de almacenamiento de cualquier objeto
typeof(1) # "double"

# Clase del objeto
class(2)  # "numeric"

# Establece u obtiene el modo de almacenamiento o el tipo de un objeto
# Esta clasificación está relacionada con el lenguaje S
storage.mode(3) # "double"
mode(4) # "numeric"

# Estructura del objeto
str(5)  # num 5

Sin embargo, el uso principal de algunas de ellas no es simplemente verificar el tipo de datos de un objeto de R. Como ejemplo, la clase de un objeto puede ser diferente del tipo de dato (lo que resulta muy útil al crear clases S3) y la función str está diseñada para mostrar la estructura completa de un objeto R. Si quieres mostrar el tipo de dato de R, recomendamos utilizar la función typeof.

x <- 1
class(x) # "numeric"
class(x) <- "Mi_clase"
class(x) # "Mi_clase"
typeof(x) # "double"

La siguiente tabla resume las diferentes posibles salidas al aplicar las funciones typeof, storage.mode y mode.

typeof storage.mode mode
logical logical logical
integer numeric integer
double numeric double
complex complex complex
character character character
raw raw raw

Hay otras funciones que permiten verificar si algún objeto pertenece a algún tipo de datos, devolviendo TRUE o FALSE. Estas funciones comienzan con is. seguido por el tipo de dato. Las revisaremos en las siguientes secciones.

Tipo de dato numérico

El tipo de dato numérico en R está compuesto por tipos de datos double (reales) y enteros. Puedes comprobar si un objeto es numérico con la función mode o si la función is.numeric devuelve TRUE.

mode(55) # "numeric"
is.numeric(3) # TRUE

Tipo de dato double o real

El tipo de datos double en R es la representación de un objeto numérico de doble precisión. Ten en cuenta que, de forma predeterminada, todos los números son dobles en R y que Inf, -Inf, NaN, la notación científica y la notación hexadecimal de números también son doubles.

typeof(2)   # "double"

# Infinito
typeof(Inf) # "double"
typeof(-Inf) # "double"

# NaN (Not a Number)
typeof(NaN)  # "double"

# Notación científica
typeof(3.12e3) # "double"

# Hexadecimal
typeof(0xbade) # "double"

Si quieres verificar si un objeto es un double, puedes usar la función is.double.

is.double(2) # TRUE
is.double(2.8) # TRUE

Tipo de dato entero

El tipo de dato entero se puede crear agregando una L a un número. Este tipo de datos es útil si quieres pasar algún objeto de R a una función de C o FORTRAN que espera un valor entero, por lo que este tipo de datos generalmente no es necesario. Puedes verificar el tipo de datos con la función is.integer.

y <- 2L
typeof(y) # "integer"

is.integer(3) # FALSE
is.integer(3L) # TRUE

Tipo de dato lógico

El tipo de dato booleano o lógico está compuesto por los valores TRUE, FALSE y NA (dato faltante).

t <- TRUE
f <- FALSE
n <- NA

typeof(t)  # "logical"
typeof(f)  # "logical"
typeof(NA) # "logical"

La función que imprime si un objeto es lógico o no es is.logical.

is.logical(T) # TRUE
is.logical(TRUE) # TRUE

Ten en cuenta que puedes usar T y F en lugar de TRUE o FALSE. Sin embargo, esto no se recomienda porque podrías sobrescribir el valor de T o F pero no el de TRUE o FALSE, como se muestra en el siguiente bloque de código.

F # FALSE
a <- T

# Puedes nombrar una variable como T o F
F <- a
F # TRUE

# No puedes nombrar una variable como TRUE o FALSE
a <- TRUE
FALSE <- a # Error

Tipo de dato complejo

El tipo de dato complejo es un objeto que incluye un número imaginario (i). Como los números imaginarios generalmente no se usan en estadística, este tipo de datos no es muy común. La función para verificar el tipo de datos es is.complex.

1 + 3i 
typeof(1 + 3i) # "complex"
is.complex(1 + 3i)

Tipo de dato carácter o cadena

Los caracteres o las cadenas de caracteres son símbolos, letras, palabras o frases dentro de comillas dobles o simples. Puedes verificar que algún objeto es de tipo carácter con la función is.character.

character <- "a"
typeof(character) # "character"
is.character(character) # TRUE

Ten en cuenta que el uso de comillas simples o dobles es equivalente.

typeof('R CODER')
typeof("R CODER")

Cabe mencionar que la función nchar cuenta el número de caracteres dentro de una cadena, incluso los espacios vacíos.

nchar("A string") # 8

Tipo de dato raw en R

El tipo de dato raw (crudo, sin procesar) contiene bytes sin procesar, por lo que es un tipo de datos muy poco común. Puedes transformar un objeto de tipo carácter o un valor numérico entero en un objeto raw con las funciones charToRaw e intToBits, respectivamente.

a <- charToRaw("R CODER")
a # 52 20 43 4f 44 45 52
typeof(a) # "raw"

b <- intToBits(3L)
typeof(b) # "raw"

Al igual que con los otros tipos de datos, la función para verificar el tipo de datos en este caso es la función is.raw.

is.raw(b) # TRUE

Coerción de tipos de datos en R

Los tipos de datos en R se pueden coercionar con las funciones que comienzan con as., resumidas en la siguiente tabla:

Función Tipo de dato al que hace coerción
as.numeric Numeric
as.integer Integer
as.double Double
as.character Character
as.logical Boolean
as.raw Raw

Considera que quieres coercionar un double a un entero. Podrías hacer lo siguiente:

a <- 3
typeof(a) # "double"
a <- as.integer(a)
typeof(a) # "integer"

También podrías coercionar un valor lógico a numérico (0 y 1) o una cadena de caracteres:

b <- TRUE
b <- as.numeric(b)
b # 1

c <- FALSE
c <- as.numeric(c)
c # 0

d <- TRUE
d <- as.character(d)
d # "TRUE"

Sin embargo, si intentas coercionar dos tipos de datos no compatibles (como una cadena de caracteres a un tipo numérico), se producirá un error:

as.double("R CODER")
NA
NAs introducidos por coerción