Objetivo del curso

Desarrollar pensamiento analítico apoyado en R, más allá de la simple ejecución de instrucciones.


Introducción a R

  • R, también conocido como ”GNU S”, es un lenguaje para la manipulación de datos, el cálculo estadístico y la generación de gráficos.

  • Implementa un dialecto del premiado lenguaje S, que marcó un antes y un después en la forma de hacer estadística con computadoras.

  • R es un lenguaje completo que permite crear nuevas funciones y extenderse a áreas como bioinformática, bioestadística y ciencia de datos.

  • R es un lenguaje orientado a objetos, donde un “objeto” es una entidad que organiza y separa los componentes de un programa, facilitando su construcción, depuración y mejora.

  • Por lo tanto, en R, todo es un objeto: todos los datos y estructuras de datos son objetos. Y, además, todos los objetos cuentan con un nombre para identificarlos.


Diferencia entre R y RStudio

R es el lenguaje que usamos para darle instrucciones a la computadora y realizar tareas estadísticas; traduce nuestro código en lenguaje máquina para ejecutarlas. RStudio es el entorno que nos permite trabajar de forma organizada y eficiente con R. RStudio es una suite integrada de herramientas para lograr la manipulación de datos, cálculo y visualización gráfica.


Instalación de R y RStudio

https://posit.co/download/rstudio-desktop/


Nota: Trabajaremos en un archivo R Markdown, que integra texto y código en un mismo documento.


Temario del curso

I. Introducción a R

II. Matrices

III. Data Frames

IV. Manipulación de datos con dplyr

V. Listas

VI. Visualización de Datos

VII. Introducción a Machine Learning


Tipos de datos

Entero

1
## [1] 1
integer(length = 3)
## [1] 0 0 0
# Crea vector de longitud de 3, inicializado con ceros (0, 0, 0). 
# Forma eficiente de reservar memoria para tres valores enteros que se llenarán posteriormente, útil más adelante


Numérico

1.53
## [1] 1.53
pi
## [1] 3.141593
numeric(length = 5)
## [1] 0 0 0 0 0


Cadenas

'Hola'
## [1] "Hola"
"Hola"
## [1] "Hola"
character(length = 2)
## [1] "" ""


Factor

Normalmente se describen como datos numéricos pero almacenan datos categórios (variables cualitativas).

# Factor

factor(c("mujer", "mujer", "mujer", "mujer"))
## [1] mujer mujer mujer mujer
## Levels: mujer


Levels ayuda a clasificar categorías que incluso podrían no estar en la muestra.

factor(c("mujer", "mujer", "mujer", "mujer"), levels = c("hombre","mujer"))
## [1] mujer mujer mujer mujer
## Levels: hombre mujer


Labels permite modificar los nombres de los niveles de factores.

factor(c("mujer", "mujer", "mujer", "mujer"), labels = "M")
## [1] M M M M
## Levels: M
factor(c("mujer", "mujer", "mujer", "mujer"), levels = c("hombre","mujer"),labels = c("H","M"))
## [1] M M M M
## Levels: H M


Pueden tener un orden.

factor(c(1,2,3))
## [1] 1 2 3
## Levels: 1 2 3
factor(c('Bajo', 'Medio', 'Alto'))
## [1] Bajo  Medio Alto 
## Levels: Alto Bajo Medio


O no.

# 0 Estudiante
# 1 Profesor
factor(c(0,1))
## [1] 0 1
## Levels: 0 1
factor(c('Estudiante', 'Profesor'))
## [1] Estudiante Profesor  
## Levels: Estudiante Profesor


También podemos fijar un orden conveniente.

factor(c('Bajo', 'Medio', 'Alto'))
## [1] Bajo  Medio Alto 
## Levels: Alto Bajo Medio
factor(c('Bajo', 'Medio', 'Alto'), labels = c("Bajo","Medio","Alto"))
## [1] Medio Alto  Bajo 
## Levels: Bajo Medio Alto
factor(c('Bajo', 'Medio', 'Alto'), labels = c("Alto","Medio","Bajo"))
## [1] Medio Bajo  Alto 
## Levels: Alto Medio Bajo


Lógico

Se basan principalmente en dos valores: TRUE (verdadero) y FALSE (falso). Pueden abreviarse como T y F, y se obtienen mediante comparaciones lógicas.

2<3
## [1] TRUE
3<2
## [1] FALSE


Perdidos y vacíos

NA # not available
## [1] NA
NULL # no definido
## NULL


Fechas

Las definiremos en formato AAAA-MM-DD.

as.Date("2026-02-17")
## [1] "2026-02-17"


A través de class() podemos determinar qué tipo de dato es un objeto.

Esto es útil cuando tenemos que verificar la entrada que se pasa a una función escrita por nosotros y así evitar que se pasen objetos de un tipo incorrecto.

class(1)
## [1] "numeric"
class('Hola')
## [1] "character"
class(c(1,2))
## [1] "numeric"
class(factor(c(1,2)))
## [1] "factor"
class(FALSE)
## [1] "logical"
class(as.Date("2026-02-17"))
## [1] "Date"
# class(false)


Y se puede preguntar por un tipo de datos en particular. La respuesta será un dato tipo lógico.

# ¿Es entero?
is.integer(1)
## [1] FALSE
is.integer(integer(1))
## [1] TRUE


# ¿Qué es pi?
is.numeric(1)
## [1] TRUE
is.numeric(pi)
## [1] TRUE
is.integer(pi)
## [1] FALSE


# ¿Es texto?
is.character(1)
## [1] FALSE
is.character('1')
## [1] TRUE


# ¿Lógicos?
isTRUE( 3 < 1)
## [1] FALSE
isTRUE(TRUE)
## [1] TRUE
isTRUE(FALSE)
## [1] FALSE
isFALSE(FALSE)
## [1] TRUE


# ¿Factores o perdidos?
is.factor(c(1,2))
## [1] FALSE
is.na(1)
## [1] FALSE
is.na(NA)
## [1] TRUE
is.null(NULL)
## [1] TRUE


# ¿Fechas?
# is.Date no existe :c
is("2026-02-17", "Date")
## [1] FALSE
is(as.Date("2026-02-17"), "Date")
## [1] TRUE


Coerción implícita

Al ejecutar una operación, R intentará transformar el tipo de dato original al tipo que permita realizar la operación.

Sin embargo, si este proceso falla obtendremos un error.

# lógico -> entero -> numérico -> cadena de texto
class(TRUE)
## [1] "logical"
TRUE + TRUE
## [1] 2
class (TRUE + TRUE)
## [1] "integer"
TRUE / TRUE
## [1] 1
class(TRUE /TRUE)
## [1] "numeric"
paste(TRUE/TRUE,"si")
## [1] "1 si"
class(paste(TRUE/TRUE,"si"))
## [1] "character"


Coerción explícita

Aquí el programador convierte manualmente el dato usando funciones específicas.

# Coerción explícita numérica
as.integer(FALSE)
## [1] 0
as.numeric('3')
## [1] 3
as.numeric('tres')
## Warning: NAs introducidos por coerción
## [1] NA


# Coerción explícita cadena
as.character(TRUE)
## [1] "TRUE"
as.character(3)
## [1] "3"


# Coerción explícita lógica
as.logical(1)
## [1] TRUE
as.logical(3)
## [1] TRUE
as.logical(0) # solo este regresa FALSE
## [1] FALSE
as.logical(-1)
## [1] TRUE
as.logical(T)
## [1] TRUE
as.logical("T")
## [1] TRUE
as.logical("true")
## [1] TRUE
as.logical("A")
## [1] NA


# Coerción explícita factor
as.factor(c(1,2))
## [1] 1 2
## Levels: 1 2
as.factor('medio')
## [1] medio
## Levels: medio



Operadores

Operadores aritméticos

Los usamos en tipos de dato enteros o numéricos.

“ + ” , por medio de este símbolo es que efectuamos una suma.

“ - ” , por medio de este símbolo es que efectuamos una resta.

“ * ” , por medio del asterisco es que efectuamos una multiplicación.

“ / ” , por medio de la diagonal es que efectuamos una división.


“^” , por medio de este símbolo es que efectuamos una potencia

2^3
## [1] 8


“%/%” , por medio de este símbolo es que efectuamos una división entera

45/4
## [1] 11.25
45 %/% 4
## [1] 11


“%%” , por medio de este símbolo es que obtenemos el módulo

38 %% 6
## [1] 2
38 / 6
## [1] 6.333333


Jerarquía de operaciones

Se aplica la regla nemotécnica PEMDAS: Paréntesis, Exponentes, Multiplicación y División (izquierda a derecha), y Adición/Suma y Sustracción/Resta (izquierda a derecha).

(4*6) +2
## [1] 26
4 * (6+2)
## [1] 32
4*6+2
## [1] 26


Operaciones ariméticas y coerción implícita

TRUE + 4
## [1] 5
FALSE * 9
## [1] 0
2 + NA
## [1] NA
7 / 0 # inf o -inf indica un resultado fuera del rango representable
## [1] Inf
-3 / 0
## [1] -Inf
# 'tres' + 2



Operadores relacionales

Devuelven un tipo de dato lógico luego de hacer comparaciones.

2 < 3
## [1] TRUE
2 > 3
## [1] FALSE
2 <= 3
## [1] TRUE
2 >= 3
## [1] FALSE
2 == 3
## [1] FALSE
2 != 3
## [1] TRUE

Operadores relacionales con cadenas (comparación alfabética)

'a' < 'b'
## [1] TRUE
'a' < 'z'
## [1] TRUE
'Sanchez' > 'Gonzalez' # "S" viene después de "G" en el alfabeto
## [1] TRUE
'agua' < 'azul' 
## [1] TRUE
'agua' > 'abril'
## [1] TRUE
'A' < 'a'
## [1] FALSE

Operadores lógicos

  • & , significa “y” (conjunción)

Sean P y Q dos proposiciones o condiciones, ent.

P Q P & Q
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

Notemos que una conjunción es verdadera únicamente cuando ambas condiciones se cumplen o son verdaderas, en cualquier otro caso es falsa.

TRUE & TRUE
## [1] TRUE
3 < 1 & 4 > 2
## [1] FALSE


  • | , significa “o” (disyunción)

Sean P y Q dos proposiciones o condiciones, ent.

P Q P
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

Una disyunción es verdadera siempre y cuando al menos una de las proposiciones o condiciones sea verdadera, por otro lado, solo es falsa si ambas condiciones lo son.

TRUE | FALSE
## [1] TRUE
3 < 1 | 4 > 2
## [1] TRUE


  • ! , significa “no” (negación). Al aplicar este operador se cambia el valor guardado en una variable lógica. Sean P una proposición o condición, ent.
P !P
TRUE FALSE
FALSE TRUE
!TRUE
## [1] FALSE
!(3 < 1)
## [1] TRUE



Operadores de asignación

Al programar es importante asignar variables pues esto nos permite guardar la información para poder realizar operaciones.

Existen varias formas de crear variables:

  • a = 6
  • a ← 6 Es la forma más usada por convención del lenguaje R
  • 6 → a
  • assign(“a”,6)
  • a ← b ← 6

Después de correr estas líneas de código, las variables quedan guardadas en nuestro espacio de trabajo.

dado <- 6
dado
## [1] 6


dado2 <- 2
dado2
## [1] 2


5 -> dado3
dado3
## [1] 5


dado + dado2
## [1] 8


a <- b <- 100
a
## [1] 100
b
## [1] 100


assign("b",3)
b
## [1] 3


exists("b")
## [1] TRUE


rm(b)
exists("b")
## [1] FALSE


ls()
## [1] "a"     "dado"  "dado2" "dado3"
rm(list=ls())
ls()
## character(0)