3 Tipos de datos
En términos genéricos, todos los elementos que maneja R se consideran objetos: un valor numérico, un vector, una función, una base de datos, un gráfico, todos son objetos.
Uno de los típicos errores que se nos presenta al usar R es el mal uso de las distintas clases de objetos que manipulamos en nuestras sesiones de trabajo.
Para un procesamiento correcto, un lenguaje de programación debe saber qué se puede y qué no se puede hacer con un valor en particular. Por ejemplo, no se pueden hacer operaciones matemáticas con las palabras “hola” y “mundo”. Del mismo modo, no puede cambiar los números 1 y -34.5 de minúsculas a mayúsculas. Debido a esto, R tiene una característica llamada tipos de datos.
Principales tipos de datos que vamos a usar:
Clase | Ejemplo |
---|---|
numérico | 12.3, 5, 999 |
caracter | hola, JUAN |
lógica | TRUE, FALSE |
fecha | 2021-05-06 |
3.1 Vectores
La unidad básica de datos en R es un vector, los cuales pueden ser de diferentes clases. Los que más usaremos son las siguientes clases.
vector <- c(Concatenación, de, elementos, atómicos)
<- c(8.5, 9, 11) raices_largo
Hay muchas funciones que nos permiten inspeccionar los datos. Una muy versatil es str()
str(raices_largo)
length(raices_largo)
Supongamos que “raices_largo” es una muestra de la variable largo de raiz de trigo en cm y nos interesaria algunas métricas
summary(raices_largo)
…descomponiendo ´summary´
# Medidas de posición
mean(raices_largo)
median(raices_largo)
quantile(raices_largo, 0.25)
# Medidas de dispersión
min(raices_largo)
max(raices_largo)
range(raices_largo)
Al tratarse de números podemos hacer operaciones estadísticas o matemáticas como:
var(raices_largo)
sd(raices_largo)
sqrt(var(raices_largo))
- 1
raices_largo
sum(raices_largo)
cumsum(raices_largo)
Caracter
Almacena valores de “caracteres” o “cadenas” (en inglés “string”): pueden contener letras, números y símbolos. La forma más sencilla de indicar que un valor es de tipo carácter es colocar el valor entre comillas simples o dobles.
<- c("Hola mundo", "2022-20-04", '2022')
vec_car str(vec_car)
Lógicos
El tipo de dato lógico o booleano es en computación aquel que puede representar valores de lógica binaria, esto es 2 valores: falso o verdadero
<- c(FALSE, TRUE, F, T) # logi <- false
vec_logi str(vec_logi)
Fechas
- El formato default es yyyy-mm-dd
<- as.Date(c("2007-06-22", "2004-02-13"))
vec_fechas str(vec_fechas)
- 1 vec_fechas
- Nosotros comunmente usamos ‘dd/mm/yyyy’? debemos convertir:
<- c("01/06/2020", "31/12/2020")
vec_fechas2 str(vec_fechas2) # son caracteres!
<- as.Date(vec_fechas2, "%d/%m/%Y") # con paquete base
vec_fechas3 str(vec_fechas3)
<- lubridate::dmy(vec_fechas2) # con lubridate!
vec_fechas4 str(vec_fechas4)
diff(vec_fechas4)
- Forzando las clases explícitamente
<- as.character(raices_largo)
raices_car str(raices_car)
<- as.logical(c(0,1))
vec_logi2 vec_logi2
<- as.numeric(vec_logi)
vec_logi_num vec_logi_num
- Existe una jerarquia a la hora de R tener que decidir de qué tipo de vector se trata (“piedra, papel o tijera”)
<- c(1.7, "a") ## character
y1 str(y1)
<- c(TRUE, "a") ## character
y2 str(y2)
<- c(TRUE, 0, 10) ## numeric
y3 str(y3)
3.2 Datos faltantes
Se representan con un NA
, para cualquier tipo de datos
<- c(1, 5, NA)
vec_num str(vec_num)
length(vec_num)
3.3 Factores
En R las variables categóricas se almacenan como factores tanto sea para vectores que contienen caracteres o numéros. Uno de los usos más importantes de los factores es en el modelado estadístico, asumiendo un rol de variable categorica, diferente de las variables contínuas. Claro ejemplo de factores son los tratamientos, por ej: genotipos, bloques, etc.
A diferencia de los vectores vistos anteriormente, todo factor tiene sus niveles (levels
), que por default se ordenan alfabéticamente.
<- c("control", "B35", "A12", "control", "A12", "B35", "A12", "B35", "control")
geno str(geno)
levels(geno)
<- factor(geno)
geno_f str(geno_f)
3.4 Secuencias
Numéricas
1:7
seq(from = 0, to = 20, #by=2) #
length=4)
rep(1:3, times=3) # , each=3
Letras
LETTERS rep(c("a","b", "c"), times=3) # , each=3
Fechas
seq(as.Date("2015-01-15"), as.Date("2015-12-15"), "1 month")
3.5 Números aleatorios
La generación de números aleatorios es en muchas ocasiones un requerimiento esencial en investigación científica. Proceder de este modo puede reducir cualquier sesgo generado por nuestra persona a la hora de seleccionar una muestra, o aplicar un tratamiento a una unidad experimental.
- Generar números enteros de modo aleatorio de una muestra determinada
sample()
set.seed(123)
sample(1:30, size=10, replace=F) #sin reposición
- Generar números aleatorios de una distribución específica de parámetros conocidos:
runif()
- números racionales aleatoriamente, uniformemente distribuidos en un intervalo
<- runif(100, min=3, max=4)
num_unif hist(num_unif)
rnorm()
- números aleatorios, pertenecientes a una población con distribución normal, con parámetros μ y σ.
<- rnorm(100, mean=70, sd=5)
num_norm hist(num_norm)
3.6 Valores especiales
Existen valores reservados para representar datos faltantes, infinitos, e indefiniciones matemáticas.
- NA (Not Available) significa dato faltante/indisponible. El NA tiene una clase, o sea, pueden ser NA numeric, NA character, etc.
<- c(2, 4, NA, 6)
y is.na(y)
Calcule el promedio de y (use la ayuda de R en caso necesario)
mean(y)
- NaN (Not a Number) es el resultado de una operación matemática inválida, ej: 0/0 y log(-1). Un NaN es un NA, pero no recíprocamente.
0/0
is.nan(0/0)
is.na(0/0)
NULL
es el vacío de R. Es como si el objeto no existiese
= NULL
a a
Inf
(infinito). Es el resultado de operaciones matemáticas cuyo límite es infinito, es decir, es un número muy grande, por ejemplo, 1/0 o 10^310. Acepta signo negativo -Inf.
1/0
1/Inf