TIPOS DE DATOS

ESTADÍSTICA ESPOCH

Los tipos de datos más comunes en R son los que se enumeran en la siguiente lista:

  • numeric (sea integer o double)
  • character
  • logical
  • NULL
  • complex
  • raw

1. Tipos de datos más comunes

1.1 Numeric

El tipo de dato numérico en R está compuesto por :

  • integers
  • doubles

1.1.1 Integer

Representan números enteros, sin una parte decimal o fraccionaria, se añade el sufijo L al número para crear un dato entero.

5L ; 4L ; 567L
[1] 5
[1] 4
[1] 567

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.

1.1.2 Double

Representan números que tienen una parte decimal o fraccionaria. También llamados double o float.Es la representación de un objeto numérico de doble precisión.

5.4 ; 3.6768 ; 567

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.

# Notación científica
3.6768e23

# Notación hexadecimal
0xbade

1.1.2.1 Inf

Inf y -Inf significa infinito (o infinito negativo) y es el resultado de almacenar un número grande o el resultado de la división por cero.

factorial(3435)
[1] Inf
2^10267
[1] Inf
-2^10267
[1] -Inf
2324/0
[1] Inf

Inf es una palabra reservada y en la mayoría de los casos es producto de cálculos en el lenguaje R y por lo tanto muy raramente un producto de la importación de datos. Infinito también le indica que el valor no falta y ¡es un número!

1.1.2.2 NaN (not a number)

Es una palabra reservada que significa que nuestro cálculo o no tiene sentido matemático (indefinido) o que podría no haberse realizado correctamente.

Inf-Inf
[1] NaN
sqrt(-34)
[1] NaN
log(-3)
[1] NaN
1/log(-34)
[1] NaN
sqrt(-34)+3
[1] NaN

1.2 Character

Son cadenas de texto, es decir, secuencias de caracteres.Siempre esté rodeado de comillas, simples o dobles.

"Juan" ; 'lao_676@'
[1] "Juan"
[1] "lao_676@"

Este es el tipo de datos más flexible de R, pues una cadena de texto puede contener letras, números, espacios, signos de puntuación y símbolos especiales.

1.2.1 Función nchar ()

Cuenta el número de caracteres dentro de una cadena, incluso los espacios vacíos.

cad<-"Luis Reinaldo Chávez Yuqui"
nchar(x = cad)
[1] 26

1.3 Logical

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

TRUE; T
FALSE; F
NA

Como este tipo de dato sólo admite tres valores específicos, es el más restrictivo de R.

1.3.1 NA (not available)

La traducción de not available al español es no disponible,desconocido.

En R, los valores NA son usados para representar valores perdidos.

En general una operación con elementos NA, resulta NA.

8+NA ; NA**2 ; 8%%NA ; NA+NA
[1] NA
[1] NA
[1] NA
[1] NA

NA además puede aparecer como resultado de una operación realizada, pero que no tuvo éxito en su ejecución.

También hay constantes NA_integer_, NA_real_, NA_complex_ y NA_character_.Normalmente no necesitas saber sobre los diferentes tipos porque siempre puedes usar NA, el que se convertirá al tipo correcto usando las reglas implícitas de coerción. Sin embargo, existen algunas funciones que son estrictas acerca de sus inputs, por lo que es útil tener presente este conocimiento, así tu código puede ser lo suficientemente específico cuando lo necesites.

1.4 NULL

NULL representa la ausencia de datos. Es una palabra reservada que simboliza el objeto nulo en R.Es devuelto a menudo por expresiones y funciones cuyo valor es indefinido.

NULL
NULL

La diferencia entre NA y NULL es que :

  • Un dato NULL aparece sólo cuando R intenta recuperar un dato y no encuentra nada
  • NA es usado para representar explícitamente datos perdidos, omitidos o que por alguna razón son faltantes.

Por ejemplo, si tratamos de recuperar la edad de una persona encuestada que no existe, obtendríamos un NULL, pues no hay ningún dato que corresponda con ello.En cambio, si tratamos de recuperar su estado civil, y la persona encuestada no contestó esta pregunta, obtendríamos un NA.

2 Verificar el tipo de dato

Hay varias funciones que pueden imprimir el tipo de dato de un objeto de R. Las enlistamos a continuación:

  • class ( ):nos da el tipo de objeto desde el punto de vista de la POO en R ,es decir desde su definición de alto nivel. No es una clasificación mutuamente excluyente
  • typeof ( ):nos da el tipo de objeto desde el punto de vista de R,es decir desde su definición de bajo nivel
  • mode ( ): es una clasificación mutuamente excluyente de objetos según su estructura básica.Los modos ‘atómicos’ son numérico, complejo, carácter y lógico.Un objeto tiene uno y sólo un modo.
  • storage.mode ( ): esta clasificación igual que mode ( ) está relacionada con el lenguaje S
  • str ( ): está diseñada para mostrar la estructura completa de un objeto en R.
# Número 5.3
class(5.3); typeof(5.3) ; mode (5.3) ; str(5.3)
[1] "numeric"
[1] "double"
[1] "numeric"
 num 5.3
# Número 12
class(12L); typeof(12L) ; mode (12L) ; str(12L)
[1] "integer"
[1] "integer"
[1] "numeric"
 int 12
# Palabra CDOLMEDO
class("CDOLMEDO"); typeof("CDOLMEDO") ; mode ("CDOLMEDO") ; str("CDOLMEDO")
[1] "character"
[1] "character"
[1] "character"
 chr "CDOLMEDO"
# Vector
vector<-c(2,3,4,"juan")
class(vector); typeof(vector) ; mode (vector) ; str(vector)
[1] "character"
[1] "character"
[1] "character"
 chr [1:4] "2" "3" "4" "juan"

Cabe aclarar que el uso principal de algunas de ellas no es simplemente verificar el tipo de datos de un objeto de R. Esto se lo muestra a continuación

# función 
funcion<-mean
class(funcion); typeof(funcion) ; mode (funcion) ; str(funcion)
[1] "function"
[1] "closure"
[1] "function"
function (x, ...)  
# dataset
carros<-cars
class(carros); typeof(carros) ; mode (carros) ; str(carros)
[1] "data.frame"
[1] "list"
[1] "list"
'data.frame':   50 obs. of  2 variables:
 $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : num  2 10 4 22 16 10 18 26 34 17 ...

En resumen si lo que buscamos es mostrar el tipo de dato de R, se recomienda utilizar la función typeof ( ).

2.1 Verificación con la familia de funciones is ( )

Las funciones de esta familia se escriben así: is.tipo_de_dato .

Estas funciones toman como argumento un dato, si este es del tipo que estamos verificando, nos devolverán TRUE y en caso contrario devolverán FALSE.

is.double(5L)
[1] FALSE
is.character("LUIS")
[1] TRUE
is.na(5)
[1] FALSE
is.logical(NA)
[1] TRUE
is.numeric(54e676)
[1] TRUE

3 Coerción de tipos de datos

Cambiar el modo de un objeto a menudo se llama ‘coerción’. El modo de un objeto puede cambiar sin cambiar necesariamente la clase.

En R, los datos pueden ser coercionados, es decir, forzados, para transformarlos de un tipo a otro.

3.1 Coerción implícita

La coerción es muy importante. Cuando pedimos a R ejecutar una operación, intentará coercionar de manera implícita, sin avisarnos, los datos de su tipo original al tipo correcto que permita realizarla.

La coerción implícita se realiza de los tipos de datos más restrictivos a los más flexibles .

Esta coerción ocurre en el siguiente orden:

logical -> numeric -> character .

logical -> integer -> double -> character .

op1<-2+3+3L
typeof(op1) # El resultado se coerciona al tipo de dato más flexible de esa operación, i.e double
[1] "double"
vect<-c(2,3.4,"Juan",TRUE,NA)
typeof(vect) # los datos del vector se coercionan al tipo de dato más flexible de ese vector, i.e character
[1] "character"

3.2 Coerción explícita con la familia as ( )

Las funciones de esta familia se escriben así: as.tipo_de_dato .

Cuando estas funciones tienen éxito en la coerción, nos devuelven datos del tipo pedido. Si fallan, obtenemos NA como resultado. Esto sucede porque ciertás coerciones no tienen sentido y por ende nos devuelven NA.

3.2.1 Coerción de integer a double y viceversa

# Coerción de un integer a double
a<-5L
typeof(a)
[1] "integer"
a<- as.double(a)
typeof(a) 
[1] "double"
# Coerción de un double a integer
b<-3
typeof(b)
[1] "double"
b<- as.integer(b)
typeof(b)
[1] "integer"

No nos devuelve ningún NA

3.2.2 Coerción de numeric a character y viceversa

3.2.2.1 De numeric a character

# Coerción de un numeric a character
c<-456
typeof(c)
[1] "double"
c<- as.character(c)
typeof(c) 
[1] "character"

3.2.2.2 De character a numeric

# Coerción de un character a numeric
d<-"juan"
typeof(d)
[1] "character"
d<- as.numeric(d)
Warning: NAs introducidos por coerción
typeof(d) 
[1] "double"

Nos da un NA de tipo NA_real_ cuando cambiamos de character a numeric esto se debe a lo mencionado anteriormente de que esta coersión no tiene sentido.

3.2.3 Coerción de logical a numeric y viceversa

3.2.3.1 De logical a numeric

Importante : Si coercionamos un dato de tipo lógico a numérico obtenemos lo que sigue

  • TRUE -> 1
  • FALSE-> 0
# Coerción de un logical a numeric
as.numeric(TRUE) # da 1
[1] 1
as.numeric(FALSE) # da 0
[1] 0

3.2.3.2 De numeric a logical

Importante : Si coercionamos un dato de tipo numérico a lógico obtenemos lo que sigue

  • valores numéricos y complejos distintos a 0 -> TRUE
  • valores iguales a 0 -> FALSE
# Coerción de un numeric a logical
as.logical(5.32222) # da TRUE
[1] TRUE
as.logical(0) # da FALSE
[1] FALSE

Bibliografía

  • Jones, E., Harden, S., & Crawley, M. (2023). The R Book (3a ed.). John Wiley & Sons Inc.
  • Mendoza Vega, J. B. (s/f). R para principiantes (1a ed.). https://bookdown.org/jboscomendoza/r-principiantes4/
  • R CODER.La mejor forma de empezar a aprender programación en R. (s/f). R CODER. https://r-coder.com/inicio/
  • Whickham, H., & Grolemund, G. (2014). Hands-On Programming with R (1a ed.). O’Reilly Media, Inc.
  • Whickham, H., & Grolemund, G. (2017). R for Data Science (1a ed.). O’Reilly Media, Inc. https://r4ds.had.co.nz/