Variables y Tipos de Datos
## Objetivos de Aprendizaje
- Declarar y trabajar con variables
- Comprender los tipos de datos atómicos de R
- Dominar vectores y operaciones con vectores
- Trabajar con matrices y dataframes
- Comprender conversión de tipos
## Variables
### Asignación
```r
# Usando operador de asignación (preferido)
x <- 10
nombre <- "Alicia"
es_valido <- TRUE
# Usando signo igual
y = 20
# Imprimir valor
x
print(x)
```
### Reglas de Nomenclatura
- Empezar con letra o punto (no dígito)
- Puede contener letras, números, guiones bajos, puntos
- Distingue mayúsculas de minúsculas
- No usar palabras reservadas
```r
# Nombres de variables válidos
mi_var <- 5
miVar <- 5
MI_VAR <- 5
.mivar <- 5 # Empezar con punto es válido
mivar2 <- 5
# Palabras reservadas a evitar
# if, else, for, while, function, TRUE, FALSE, NULL
```
## Tipos de Datos Atómicos
### Numérico
```r
# Doble precisión (por defecto)
x <- 3.14
class(x) # "numeric"
# Entero (con sufijo L)
y <- 5L
class(y) # "integer"
# Verificar tipo
is.numeric(x) # TRUE
is.integer(y) # FALSE para 5L (es entero)
is.integer(5) # FALSE (5 es numérico por defecto)
```
### Carácter (Cadenas)
```r
# Asignación de cadena
nombre <- "Alicia"
saludo <- 'Hola'
# Verificar tipo
class(nombre) # "character"
is.character(nombre) # TRUE
```
### Lógico (Booleano)
```r
# Valores lógicos (mayúsculas)
es_activo <- TRUE
tiene_permiso <- FALSE
# También se puede usar T y F (pero evitar en scripts)
es_valido <- T
es_invalido <- F
# Verificar tipo
class(es_activo) # "logical"
is.logical(es_activo) # TRUE
```
### Valores Especiales
```r
# NULL - ausencia de valor
x <- NULL
is.null(x) # TRUE
# NA - valor faltante
x <- NA
is.na(x) # TRUE
# NaN - no es un número
x <- 0 / 0
is.nan(x) # TRUE
# Inf - infinito
x <- 1 / 0
is.infinite(x) # TRUE
# Verificar NA específicamente
x <- c(1, 2, NA, 4)
is.na(x) # FALSE FALSE TRUE FALSE
```
## Vectores
### Crear Vectores
```r
# Usando función c() (combinar)
nums <- c(1, 2, 3, 4, 5)
letras <- c("a", "b", "c")
# Usando operador dos puntos
1:5 # c(1, 2, 3, 4, 5)
# Usando seq()
seq(1, 10, by = 2) # 1, 3, 5, 7, 9
seq(1, 10, length.out = 5) # 1, 3.25, 5.5, 7.75, 10
# Usando rep()
rep(1, 5) # c(1, 1, 1, 1, 1)
rep(c(1, 2), 3) # c(1, 2, 1, 2, 1, 2)
rep(c(1, 2), each = 3) # c(1, 1, 1, 2, 2, 2)
```
### Operaciones con Vectores
```r
# Operaciones aritméticas (elemento a elemento)
c(1, 2, 3) + c(4, 5, 6) # c(5, 7, 9)
c(1, 2, 3) * 2 # c(2, 4, 6)
# Reciclado (vector más corto se recicla)
c(1, 2) + c(10, 20, 30, 40)
# Warning: longer object length not multiple of shorter
# Comparación
c(1, 2, 3) > 2 # FALSE FALSE TRUE
c(1, 2, 3) == 2 # FALSE TRUE FALSE
```
### Indexación de Vectores
```r
vec <- c(10, 20, 30, 40, 50)
# Por posición (1-indexado)
vec[1] # Primer elemento: 10
vec[3] # Tercer elemento: 30
vec[1:3] # Primeros tres: 10, 20, 30
# Indexación negativa (excluir)
vec[-1] # Todos excepto el primero: 20, 30, 40, 50
vec[-c(1, 3)] # Excluir 1ro y 3ro: 20, 40, 50
# Indexación lógica
vec[vec > 25] # Elementos > 25: 30, 40, 50
# Por nombre
named_vec <- c(a = 1, b = 2, c = 3)
named_vec["a"] # 1
```
### Funciones de Vectores
```r
vec <- c(3, 1, 4, 1, 5, 9, 2, 6)
length(vec) # 8
sum(vec) # Suma: 31
prod(vec) # Producto
mean(vec) # Media: 3.875
sd(vec) # Desviación estándar
var(vec) # Varianza
# Ordenar
sort(vec) # Ascendente
sort(vec, decreasing = TRUE) # Descendente
# Valores únicos
unique(c(1, 2, 2, 3, 3, 3)) # 1, 2, 3
# Contar ocurrencias
table(c("a", "b", "a", "c", "a"))
# a b c
# 3 1 1
```
## Matrices
### Crear Matrices
```r
# Por enlace de fila/columna
fila1 <- c(1, 2, 3)
fila2 <- c(4, 5, 6)
mat <- rbind(fila1, fila2) # matriz 2x3
mat2 <- cbind(c(1, 2), c(3, 4), c(5, 6)) # matriz 2x3
# Usando matrix()
mat <- matrix(1:6, nrow = 2, ncol = 3)
mat <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
```
### Operaciones con Matrices
```r
mat <- matrix(1:4, nrow = 2)
mat2 <- matrix(5:8, nrow = 2)
# Elemento a elemento
mat + mat2
mat * mat2 # Multiplicación elemento a elemento
# Multiplicación de matrices (%*%)
mat %*% t(mat2)
# Transponer
t(mat)
# Dimensiones
nrow(mat)
ncol(mat)
dim(mat)
```
### Indexación de Matrices
```r
mat <- matrix(1:9, nrow = 3)
mat[1, 2] # Fila 1, Columna 2
mat[1, ] # Toda la primera fila
mat[, 2] # Toda la segunda columna
mat[1:2, 2:3] # Submatriz
```
## Listas
### Crear Listas
```r
# Crear una lista con diferentes tipos
mi_lista <- list(
nombre = "Alicia",
edad = 30,
puntuaciones = c(95, 87, 92),
es_estudiante = TRUE
)
# Lista vacía
lista_vacia <- list()
```
### Operaciones con Listas
```r
mi_lista <- list(nombre = "Alicia", edad = 30)
# Acceso por nombre
mi_lista$nombre # "Alicia"
mi_lista[["nombre"]] # "Alicia"
# Acceso por índice
mi_lista[[1]] # "Alicia"
# Obtener todos los nombres
names(mi_lista) # "nombre" "edad"
```
### Convertir Lista a Vector
```r
# Unlist aplana a vector
unlist(list(1, 2, 3)) # c(1, 2, 3)
```
## Dataframes
### Crear Dataframes
```r
# Crear desde vectores
df <- data.frame(
nombre = c("Alicia", "Roberto", "Carlos"),
edad = c(25, 30, 35),
puntuacion = c(95.5, 87.3, 92.1)
)
# Verificar estructura
str(df)
# 'data.frame': 3 obs. de 3 variables
# Ver
View(df)
head(df)
tail(df)
```
### Indexación de Dataframes
```r
df <- data.frame(
nombre = c("Alicia", "Roberto", "Carlos"),
edad = c(25, 30, 35)
)
# Por nombre de columna
df$nombre # "Alicia" "Roberto" "Carlos"
df[, "nombre"] # Igual
# Por posición
df[, 1] # Primera columna
df[1, ] # Primera fila
# Usando subset
subset(df, edad > 25)
```
## Conversión de Tipos
### Verificar Tipos
```r
x <- 5
is.numeric(x) # TRUE
is.integer(x) # FALSE
is.character(x) # FALSE
is.logical(x) # FALSE
is.vector(x) # TRUE
```
### Convertir Tipos
```r
# A carácter
as.character(5) # "5"
as.character(TRUE) # "TRUE"
# A numérico
as.numeric("5") # 5
as.numeric("hola") # NA con advertencia
as.numeric(TRUE) # 1
as.numeric(FALSE) # 0
# A entero
as.integer(5.7) # 5
# A lógico
as.logical(1) # TRUE
as.logical(0) # FALSE
as.logical("TRUE") # TRUE
as.logical("FALSE") # FALSE
# A factor
as.factor(c("a", "b", "a")) # a b a
# Levels: a b
```
### Conversión Automática
```r
# R convierte automáticamente durante operaciones
c(1, "hola", TRUE)
# "1" "hola" "TRUE" (todo carácter)
1 + "2" # 3 (carácter a numérico)
```
## Resumen
- Variables creadas con `<-` asignación
- Tipos atómicos: numeric, character, logical, special (NULL, NA, NaN, Inf)
- Vectores son 1-dimensionales, creados con `c()`
- Matrices son 2-dimensionales con `matrix()`
- Listas pueden contener tipos mixtos, accedidas con `$` o `[[]]`
- Dataframes son tabulares, como hojas de cálculo
- Usar funciones `as.*()` para conversión de tipos
- R usa indexación basada en 1
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →