Repaso 1: Introducción a la Programación en R

0.1 Introducción

En este repaso se presentan los conceptos fundamentales sobre cómo las computadoras almacenan, procesan información y ejecutan programas, y la definiciones de elementos clave al programar.

0.1.1 Jerarquía de Datos

  • La unidad de información más básica es el bit, que puede tomar únicamente los valores 0 o 1.
  • Un byte es igual a 8 bits, el cual permite representar un character.

  • Los characters corresponden a letras, dígitos o símbolos especiales y se codifican internamente como patrones de bits según un character set, como ASCII o Unicode.

  • Los characters se agrupan en fields, que representan unidades de información con significado, por ejemplo, un nombre o una edad.

  • Varios fields relacionados forman un record.

  • Un conjunto de records constituye un file, y un database

0.2 Expresiones, objetos y simbolos

  • El código en R se compone de ’expressions’ son compuestas de objetos y funciones como operaciones aritmeticas (Ej: 1+1), asignaciones (Ej: x<- 1), sentencias condicionales ( Ej: if (x<1) { “x es menor a 1} ), etc

  • El código R es un lenguaje que manipula ‘objects’ como vectores, listas, arreglos, funciones

  • Los nombres de variable en R son denominados ‘symbols’

  • Para nombrar un objeto: un nombre no puede empezar con un número, y no puede usar caracteres especiales como: ^!$@+-/, or *:

OJO! R puede sobreescribir variables existentes sin preguntar

0.3 Shortcuts

0.4 Tipos de Variables

Todo se guarda como un objeto. Cada objeto tiene un modo, tipo y una clase, lo cual determina qué operaciones se pueden realizar sobre él.

  • Tipo : determina como se guarda internamente en memoria

    typeof("hola")   # "character" 
    [1] "character"
    typeof(TRUE)     # "logical"
    [1] "logical"
    typeof(1L)       # "integer"al poner la letra L mayuscula a lado
    [1] "integer"
    typeof(10)       # "double" por default
    [1] "double"
    typeof(list())   # "list"
    [1] "list"
    typeof(3.14)     # "double"
    [1] "double"
    • # mode() es una version antigua de typeof()
  • Clase: indica como debe comportarse el objeto en R , define qué metodos usan print, plot, etc.

    x <- 5
    class(x)                    ## "numeric"
    [1] "numeric"
    d <- as.Date("2024-01-01")
    typeof(d)                   ## "double"
    [1] "double"
    class(d)                    ## "Date"
    [1] "Date"
    • R cuenta las fechas como números (como días desde 1970) , aunque la fecha se guarda en memoria como un double, R la trata como fecha en su clase
  • R por default usa double, y lo que va en comillas “” es texto

El [1] que aparece a veces solo indica la posición del primer elemento del resultado.

0.5 Objetos (objects) comunes en R

0.5.1 Vectores

Un vector es una colección unidimensional de elementos del mismo tipo.

Tipos posibles: numeric, integer, logical, caracter

x <- c(1, 8, 3, 5)
y <- c("a", "b", "c")
z <- c(TRUE, FALSE, TRUE)

Los corchetes [ ] a lado de una variable indican la posicion k del objeto, como el cajón al que accedes

x[1]
[1] 1
y[1:3]
[1] "a" "b" "c"
  • Todos los elementos deben ser del mismo tipo. Si no, R coacciona (convierte), sube esta escalera: logical → integer → numeric → character

0.5.2 Matrix

m <- matrix(1:6, nrow = 2, ncol = 3)
m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

0.5.3 Lista

l <- list(
  numeros = 1:3,
  matriz = matrix(1:4, 2, 2),
  texto = "hola",
  logico = TRUE
)

0.5.4 Aritmeticos y de Relacion

0.5.5 Operadores Lógicos

x <- 5
y <- 4

x > 4 & y < 2
[1] FALSE
c(TRUE, FALSE) & c(TRUE, TRUE) # AND cada elemento del vector
[1]  TRUE FALSE
# c(TRUE, FALSE) && c(TRUE, TRUE) # para no vectores
# #solo evalua el primer elemento de cada objeto

0.6 Ejercicio 1

0.7 Ejemplo: proceso de un loop paso a paso

#El siguiente for-loop muestra cómo R itera desde 1 hasta 10.
En cada iteración se imprime: - el valor actual del índice i - el valor acumulado del contador

# 1. Definir el inicio y el final del loop
inicio <- 2
fin <- 5

# 2. Crear una lista vacía para guardar los valores
contador_lista <- list()

# 3. Inicializar el contador
contador <- inicio

# 4. Loop for: itera desde inicio hasta fin
for (i in inicio:fin) {

  # Guardar el valor actual del contador en la lista
  contador_lista[[i]] <- contador

  # Aumentar el contador en 1
  contador <- contador + 1
}

# 5. Imprimir la lista final
contador_lista
[[1]]
NULL

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

[[5]]
[1] 5
contador <- 0

for (i in 1:10) {
  contador <- contador + 2

  cat("Intento:", i,
      "| Valor del contador:", contador, "\n")
}
Intento: 1 | Valor del contador: 2 
Intento: 2 | Valor del contador: 4 
Intento: 3 | Valor del contador: 6 
Intento: 4 | Valor del contador: 8 
Intento: 5 | Valor del contador: 10 
Intento: 6 | Valor del contador: 12 
Intento: 7 | Valor del contador: 14 
Intento: 8 | Valor del contador: 16 
Intento: 9 | Valor del contador: 18 
Intento: 10 | Valor del contador: 20 
contador <- 0

for (i in 1:10) {
  anterior <- contador
  contador <- contador + 1
  
  cat("i =", i,
      "| contador anterior =", anterior,
      "| contador nuevo =", contador, "\n")
}
i = 1 | contador anterior = 0 | contador nuevo = 1 
i = 2 | contador anterior = 1 | contador nuevo = 2 
i = 3 | contador anterior = 2 | contador nuevo = 3 
i = 4 | contador anterior = 3 | contador nuevo = 4 
i = 5 | contador anterior = 4 | contador nuevo = 5 
i = 6 | contador anterior = 5 | contador nuevo = 6 
i = 7 | contador anterior = 6 | contador nuevo = 7 
i = 8 | contador anterior = 7 | contador nuevo = 8 
i = 9 | contador anterior = 8 | contador nuevo = 9 
i = 10 | contador anterior = 9 | contador nuevo = 10 
############################################################
# EJEMPLOS DE CONTADORES EN R
############################################################

cat("EJEMPLO 1: Contador simple (1 a 10)\n")
EJEMPLO 1: Contador simple (1 a 10)
for (i in 1:10) {
  cat("i =", i, "\n")
}
i = 1 
i = 2 
i = 3 
i = 4 
i = 5 
i = 6 
i = 7 
i = 8 
i = 9 
i = 10 
cat("EJEMPLO 2: Contador acumulativo (suma)\n")
EJEMPLO 2: Contador acumulativo (suma)
contador <- 0

for (i in 1:10) {
  contador <- contador + i
  cat("Iteración:", i,
      "| Suma acumulada:", contador, "\n")
}
Iteración: 1 | Suma acumulada: 1 
Iteración: 2 | Suma acumulada: 3 
Iteración: 3 | Suma acumulada: 6 
Iteración: 4 | Suma acumulada: 10 
Iteración: 5 | Suma acumulada: 15 
Iteración: 6 | Suma acumulada: 21 
Iteración: 7 | Suma acumulada: 28 
Iteración: 8 | Suma acumulada: 36 
Iteración: 9 | Suma acumulada: 45 
Iteración: 10 | Suma acumulada: 55 

0.8 Condicionales

############################################################
# EJEMPLOS DE CONDICIONALES EN R
############################################################

x <- 1

if (x > 5) {
  cat("x es mayor que 5\n")
  x+1
} else {
  cat("x no es mayor que 5")
  x-5
}
x no es mayor que 5
[1] -4
# Ejemplo 2: if - else
y <- 3

if (y %% 2 == 0) {
  cat("y es par\n")
} else {
  cat("y es impar\n")
}
y es impar
# Ejemplo 3: if - else if - else
nota <- 8

if (nota >= 9) {
  cat("Excelente\n")
} else if (nota >= 7) {
  cat("Aprobado\n")
} else {
  cat("Reprobado\n")
}
Aprobado
# Ejemplo 7: Condición compuesta (AND / OR)
edad <- 17
tiene_id <- TRUE

if (edad >= 18 && tiene_id) {
  cat("Puede ingresar\n")
} else {
  cat("No puede ingresar\n")
}
No puede ingresar

1 Plotting

1.0.1 Cargar librerías necesarias

library(ggplot2)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(tidyr)

1.0.2 Cargar dataset mpg

data(mpg)

1.1 GRAFICOS BASICOS (BASE R)

1.1.1 Histograma: una variable numérica

hist(mpg$cty, xlab = "Miles por galón (ciudad)", main = "Histograma MPG Ciudad", breaks = 12, col = "red", border = "blue")

1.1.2 Barplot: variable categórica

barplot(table(mpg$drv), xlab = "Tipo de tracción", ylab = "Frecuencia", main = "Distribución de Tracción", col = "dodgerblue")

1.1.3 Boxplot: numérica vs categórica

boxplot(hwy ~ drv, data = mpg, xlab = "Tipo de tracción", ylab = "MPG carretera", main = "MPG vs Tracción", col = "darkorange")

1.1.4 Scatterplot: dos variables numéricas

plot(hwy ~ displ, data = mpg, xlab = "Cilindraje del motor", ylab = "MPG carretera", main = "MPG vs Cilindraje", pch = 20, col = "blue")

# Para ver el catalogo de colores usar colors() 

1.2 GRAFICOS CON GGPLOT2

1.2.1 Scatterplot con ggplot

ggplot(mpg, aes(x = displ, y = hwy)) + geom_point(color = "blue", size = 2) + labs(title = "MPG vs Cilindraje", x = "Cilindraje", y = "MPG carretera") + theme_bw()

2

2.0.1 For more information on Plotting

https://scpoecon.github.io/ScPoEconometrics/index.html