CONAHCYT-Universidad de Guadalajara
9 de enero de 2025
R
R
{base}.Las estructuras de control establecen condicionales en nuestros programas. Por ejemplo, ¿qué condiciones deben cumplirse para realizar una operación? o ¿qué debe ocurrir para ejecutar una función?
En otras palabras, determinan la lógica y el orden en el que ocurren las operaciones, en especial al definir funciones.
Las estructuras de control más usadas en R son las siguientes:
Estructura de control | Descripción |
---|---|
if , else |
Sí, de otro modo |
for |
Para cada uno en |
while |
Mientras |
break |
Interrupción |
next |
Siguiente |
if
y else
if (si)
se usa cuando queremos que una operación se ejecute unicamente cuando se cumple una condición.if
y else
si
, iniciamos nuestra función con if()
:if
y else
else{}
para establecer la acción a ejecutar si no se cumple la condición:La identación es importante así como el uso correcto de {}
.
Finalmente, si nos interesa que se muestre en la pantalla el resultado usamos la función print()
o return()
.
Para usar nuestro condicional debemos definir los argumentos de entrada (numero).
En el ejemplo anterior hemos omitido evaluar la condición de que numero == 10
. Para contemplar esta posibilidad podemos usar el siguiente código:
05:00
if
y else
.
edad>=18
años.En R
podemos vectorizar el condicional usando la función ifelse()
.
En lugar de escribir una línea de código para cada comparación, podemos usar una sola llamada a esta función, que se aplicará a cada elemento de un vector.
Esta función tiene la siguiente estructura:
ifelse()
ifelse()
para saber si los número en un vector son pares o nones:R
, los bucles (loop) son estructuras de control de flujo que permiten repetir un bloque de código de forma cíclica ya sea un determinado número de veces o hasta que se cumpla una condición.for
for
nos permite ejecutar un bucle ( loop ) realizando una operación para cada elemento de un conjunto de datos.R
:
{}
.for
Las operaciones en un bucle for
se realizan pero sus resultados nunca son devueltos automáticamente, es necesario pedirlos de manera explícita.
Una solución para mostrar los resultados de un bucle for
es usar la función print()
.
print()
sólo mostrará los resultados de las operaciones en la consola, no los asignará a un objeto.for
a un objeto, usamos índices.R
el primer elemento de un bucle siempre es identificado con el número 1, y se realizarán las operaciones hasta llegar al total de elementos que especifiquemos:for
for
podemos generar un objeto vacío:for
y vectorizaciónfor
pueden obtenerse vectorizando la operación:R
el uso de bucles for
son poco populares ya que es más rápido y sencillo vectorizar las operaciones.while
Este es un tipo de bucle que ocurre mientras una condición es verdadera (TRUE
). La operación se realiza hasta que se llega a cumplir un criterio previamente establecido.
La sintaxis de while
es la siguiente:
R
:
while
Probemos sumar +1
a un valor, mientras que este sea menor que 5.
Advertencia
¡Ten cuidado de crear bucles infinitos! Si ejecutas una condición que nunca será FALSE
, este nunca se detendra.
ESC
para detener su ejecución. De otra forma, podría congelarse tu equipo.break
y next
En R
las palabras break
y next
son palabras reservadas. Es decir, NO podemos asignarle nuevos valores y realizan una acción específica cuando aparecen en nuestro código.
break
nos permite interrumpir un bucle.
next
nos deja avanzar a la siguiente iteración saltándose la actual.
Ambas funciones pueden ser utilizadas en bucles de tipo for
y while
.
break
Interrumpimos un for
cuando i
es igual a 3, aunque aún queden 7 elementos en el objeto.
break
while
antes de se cumpla la condición de que numero
sea mayor a 5, en cuanto este tiene el valor de 15.next
Por su parte, usamos next
para “saltarnos” una iteración en un bucle. Cuando la condición se cumple, esa iteración es omitida.
apply
apply
La familia de funciones apply
es usada para aplicar una función a cada elemento de una estructura de datos (i.e., matrices, dataframes
, arrays y listas).
Con esta familia de funciones podemos automatizar tareas complejas usando pocas líneas de código.
En el paradigma de R
, la familia de funciones apply
reciben como argumentos un objeto y al menos una función.
En este curso trabajaremos únicamente con las funciones más generales y de uso común de esta familia:
apply()
lapply()
apply()
apply()
aplica una función a todos los elementos de una matriz.
X
: Una matriz o un objeto que puede coercionarse como matriz (dataframe
).MARGIN
: La dimensión (margen) que agrupará los elementos de la matriz X
, para aplicar una función. 1 se refiere a las filas y 2 son columnas.FUN
: La función que queremos aplicar al objeto X
en su dimensión MARGIN
.apply()
data("mtcars") # Importamos datos de ejemplo
?mtcars
head(mtcars)
apply(mtcars,2,mean) # Promedio por columna
apply(mtcars,2,max) # Maximo por columna
apply(mtcars,2,min) # Mínimo por columna
# Ejemplo de uso de matrices
m <- matrix(seq(1:16), nrow = 4, ncol = 4)
m
apply(m, 1, min) # Mínimo por filas
apply()
También podemos definir funciones dentro de la función apply()
y aplicarlas tanto por filas como por columnas:
apply()
nos devuelve objetos del mismo tipo al que la función fue aplicadalapply()
lapply()
está diseñada para aplicar funciones a todos los elementos de una lista (por eso l).
X
es una lista u objeto coercionable a una lista.FUN
es la función a aplicar.MARGIN
porque las listas son estructuras unidimensionales que solo tienen largo.lapply()
PIBE_2020-2023.xlsx
.R
. Nota: Usa los botones del panel Environment.
Usando la función apply()
calcula el valor promedio del PIB de cada estado para el período 2020-2023. Guarda el resultado en una nueva variable denominada PIBE_promedio
en el mismo dataframe
.
Usando la función lapply()
calcula el valor aproximado del PIB nacional para cada año. Guarda el resultado en una nueva variable denominada PIB_Nacional
. Nota: Supon que puedes aproximar el valor del PIB nacional sumando el valor de los PIBE’s.
R
basePor defecto, R
tiene un sistema de generación de gráficos poderoso y flexible. Sin embargo, al inicio su uso puede resultar complejo.
En esta sección revisaremos como crear gráficas usando R
base y algunos parámetros que podemos ajustar para mejorar su presentación.
Al crear gráficas, notarás que ponemos en práctica todo lo que hemos visto hasta ahora incluyendo importar datos, hacer subconjuntos de objetos y usar funciones.
En esta sección trabajaremos de forma simultánea usando estas diapositivas y una práctica guíada Enlace
plot()
La función plot()
puede ser usada de forma general para crear gráficos.
Esta función tiene un comportamiento especial. Dependiendo del tipo de datos que ingresemos como argumento generará diferentes tipos de gráfica.
Para cada tipo de gráfico podemos ajustar diferentes parámetros que controlan su aspecto.
Sintáxis básica:
Donde:
type
: El tipo de puntos a dibujar. ?plot()
plot()
Relación entre el peso (wt) y la eficiencia en el uso de combustible (mpg) de un conjunto de vehículos en el dataset mtcars
.
plot()
Dependiendo del tipo de datos que ingresemos como argumentos a la función plot()
obtendremos distintos tipos de gráficos:
x |
y |
Gráfico |
---|---|---|
Continuo | Continuo | Diagrama de dispersión (scatterplot) |
Continuo | Discreto | Diagrama de dispersión |
Continuo | Ninguno | Diagrama de dispersión por renglón |
Discreto | Continuo | Diagrama de caja (Box plot) |
Discreto | Discreto | Gráfico de mosaico (Diagrama de Kinneman) |
Discreto | Ninguno | Gráfico de barras |
Ninguno | Cualquiera | Error |
barplot()
La función barplot()
se utiliza para crear gráficos de barras.
Permite visualizar distribuciones de frecuencias, comparar entre categorías o cualquier otro conjunto de datos categóricos.
Sintáxis básica:
height
: Tabla de frecuencias.beside = TRUE
: Indica que las barras de dibujarán lado a lado.col
= Especifica el color de las barras.main
, ylab
, xlab
: Titulo para los gráficos del eje.barplot()
legend()
Las leyendas son usadas para identificar con mayor claridad los distintos elementos en un gráfico, tales como colores y formas.
En R
usamos la función legend()
para generar leyendas. Esta función debe ser llamada después de crear un gráfico.
En cierto modo es una anotación a un gráfico ya existente.
legend()
es una función relativamente compleja, así que sólo revisaremos lo esencial.
legend()
leyenda
: Etiquetas de datos que queremos escribir en la leyenda.fill
: Los colores que acompañan a las etiquetas definidas con leyenda
. - "x,y"
: Las coordenadas en pixeles en donde se ubicará la leyenda.title
: Titulo de la leyenda.hist()
Los histogramas son gráficas que nos permiten observar la distribución de datos númericos usando barras.
Cada barra representa el número de veces (frecuencia) que se observaron datos en un rango determinado.
Para generar un histograma nosotros podemos usar la función hist()
que pide como argumento (obligatorio) un vector x
de tipo numérico.
Sintáxis básica de uso:
x
: es un vector de valores numérico.hist()
R
R
nos permite visualizar una figura a la vez. Cuando hacemos un nuevo gráfico perdemos el anterior.par()
nos permite crear una “matriz” detrás de escena para colocar múltiples gráficas en el motor visual.Para exportar un gráfico usamos alguna de las siguientes funciones, cada una corresponde con un tipo de archivo distinto. No son las únicas, pero son las más usadas.
bpm()
jpeg()
pdf()
png()
tiff()
Cada una de estas funciones tiene los siguientes argumentos tres argumentos principales.
filename
: El nombre y ruta del archivo de imagen a crear. Si no especificamos una ruta completa, entonces el el archivo será creado en nuestro directorio de trabajo.
width
: El ancho del archivo de imagen a crear, por defecto en pixeles.
height
: El alto del archivo de imagen a crear, por defecto en pixeles.
R
base[ ]
Indexar elementos en objetos.
( )
Pasar argumentos a funciones.
{ }
Definir acciones de condicionales, funciones, bucles, etc.
R
¿Qué tipo de datos conocemos?
numeric
character
factor
logical
¿Cómo podemos encontrar datos faltantes?
NA
(No disponible)NULL
(No existe)" "
(Campo vacío)R
¿Qué tipos de estructuras de datos existen?
vector
(1-D)dataframe
(2-D)list
(M-D)¿Qué funciones hemos usado?
c()
is.na()
mean()
apply()
if-statments
function
for/ while-loop
?mean()
o help("mean")
.