Desarrollar pensamiento analítico apoyado en R, más allá de la simple ejecución de instrucciones.
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.
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.
https://posit.co/download/rstudio-desktop/
Nota: Trabajaremos en un archivo R Markdown, que integra texto y código en un mismo documento.
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
1.53
## [1] 1.53
pi
## [1] 3.141593
numeric(length = 5)
## [1] 0 0 0 0 0
'Hola'
## [1] "Hola"
"Hola"
## [1] "Hola"
character(length = 2)
## [1] "" ""
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
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
NA # not available
## [1] NA
NULL # no definido
## NULL
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
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"
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
Los usamos en tipos de dato enteros o numéricos.
2^3
## [1] 8
45/4
## [1] 11.25
45 %/% 4
## [1] 11
38 %% 6
## [1] 2
38 / 6
## [1] 6.333333
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
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
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
'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
& , 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
Al programar es importante asignar variables pues esto nos permite guardar la información para poder realizar operaciones.
Existen varias formas de crear variables:
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)