Cómo Escribir Declaraciones Condicionales en R Cuatro Métodos

Four methods for writing conditional statements in R.

Aprende formas poderosas de ir más allá de las declaraciones if-else y mejorar tu código en R

Foto de Caleb Jones en Unsplash

No puedes avanzar mucho en programación sin las declaraciones condicionales.

Las declaraciones condicionales ejecutan código basado en el resultado de una condición verdadera o falsa. Son una parte esencial de la programación, y esto es especialmente cierto en R. Ya sea que estés usando R para análisis de datos, aprendizaje automático, desarrollo de software o cualquier otra cosa, las declaraciones condicionales tienen usos infinitos.

Pero, la mayoría de los principiantes en R no se dan cuenta de que hay muchas formas de escribirlas. Muchas personas aprenden las declaraciones básicas if-else y se detienen allí. Pero, a menudo hay formas más limpias y eficientes de escribir declaraciones condicionales. Los programadores avanzados de R conocen cada una de estas técnicas y cuándo usarlas. Entonces, ¿cómo puedes aprender a hacer lo mismo?

En este artículo, echaremos un vistazo a cuatro formas diferentes de escribir declaraciones condicionales en R. También cubriremos las fortalezas y limitaciones de cada técnica, y cuándo usar cada una.

Cómo escribir una declaración if-else en R

La forma más directa de escribir declaraciones condicionales en R es usando las palabras clave if y else. Esto será más familiar si ya conoces otro lenguaje de programación, y a menudo es la técnica que aprenden primero los nuevos usuarios de R.

Una declaración if estándar en R se ve así:

if (condición) {  # Código a ejecutar}

Aquí, condición es una expresión lógica que devuelve TRUE o FALSE. Si la condición devuelve TRUE, se ejecuta cualquier código dentro de las llaves. Si devuelve FALSE, el código dentro de las llaves no se ejecuta, y R pasa a la siguiente línea de código en el script.

Para ver cómo funciona esto en la práctica, podemos tomar el siguiente ejemplo.

edad <- 25if (edad >= 18) {  grupo_edad <- "adulto"}

Aquí, tenemos una variable que contiene una edad. La declaración if evalúa si el valor de edad es mayor o igual a 18. Esto es verdadero en este caso, por lo que la variable grupo_edad toma un valor de "adulto".

Esta es una forma fácil de verificar una condición simple y hacer algo si es verdadera. Pero, ¿qué pasa si queremos que nuestra declaración ejecute código si la condición es falsa?

Las declaraciones if-else son una extensión de la declaración if básica. Para entenderlas, podemos agregar algo a nuestro ejemplo anterior.

if (edad >= 18) {  grupo_edad <- "adulto"} else {  grupo_edad <- "niño"}

Este código funciona como el último ejemplo, con una excepción. En lugar de pasar cuando la condición es FALSE, se ejecuta el código dentro de las llaves después del else. Esto significa que si edad es mayor o igual a 18, se asigna a grupo_edad un valor de "adulto". Si no, grupo_edad se establece en "niño".

Las declaraciones if-else son una forma sencilla de controlar el código en un script de R. Son fácilmente entendibles, se pueden ampliar para tomar muchas condiciones y pueden ejecutar código complejo que tiene muchas líneas.

Pero, las declaraciones if-else pueden ocupar mucho espacio. Para expresiones simples como la anterior, hay otras formas de hacer exactamente la misma operación sin usar cinco líneas de código.

De hecho, es posible escribir declaraciones if-else usando una sola línea de código.

Declaraciones condicionales en línea en R

Las declaraciones condicionales en línea son una forma elegante de expresar la lógica “if-else” en una sola línea de código. Hay un par de formas de escribirlas.

Declaración if-else en línea

En primer lugar, es posible escribir una simple declaración en línea utilizando las palabras clave if y else. Esto toma la forma siguiente:

age_group <- if (age >= 18) "adulto" else "niño"

Esta declaración funciona de la misma manera que el ejemplo anterior. La única diferencia es que ahora hemos condensado la redacción para que quepa en una sola línea. Si la condición es VERDADERO, el valor de age_group se actualiza a lo que está antes de la palabra clave else – en este caso, "adulto". Si fuera FALSO, age_group se asignaría a lo que viene después de else.

La gran diferencia aquí es que ahora asignamos el resultado de toda la declaración condicional a la variable age_group. Esto mejora la redacción repetitiva en el ejemplo estándar if-else, donde tuvimos que escribir esta asignación dos veces.

Función ifelse de base-R

Si lo prefieres, puedes usar la función ifelse en su lugar. El siguiente código utiliza esta función para ejecutar la misma lógica que los ejemplos anteriores.

age_group <- ifelse(age >= 18, "adulto", "niño")

La función ifelse toma tres argumentos. Primero, viene la condición, luego un valor para devolver si la condición es verdadera, y un valor para devolver si la condición es falsa.

Esta es una forma limpia y sencilla de escribir una declaración condicional corta. También tiene otra ventaja; está vectorizada.

Haz que tu código en R sea 10 veces más rápido: Vectorización explicada en 3 minutos

Di adiós a los bucles lentos y desordenados

towardsdatascience.com

La vectorización es un concepto importante en R. Si una función está vectorizada, se aplica automáticamente a múltiples valores en lugar de solo uno. Para ver un ejemplo con la función ifelse, asignemos más valores a nuestra variable age y ejecutemos el código de nuevo.

age <- c(16, 45, 23, 82)age_group <- ifelse(age >= 18, "adulto", "niño")# Devuelve "niño" "adulto" "adulto" "adulto"

La función ifelse evalúa automáticamente todos los valores en age, devolviendo una secuencia de salidas correspondientes. Esto hace que ifelse sea una forma limpia de evaluar muchas condiciones simples sin necesidad de bucles lentos y desordenados.

Indexación condicional en R

Aunque ifelse puede evaluar muchos valores fácilmente, hay otras formas de hacerlo.

La indexación permite a los programadores de R acceder a partes específicas de una estructura de datos que contiene muchos valores. Por ejemplo, si quisiéramos obtener el tercer elemento en el vector age del ejemplo anterior, podríamos indexar age con 3 dentro de corchetes:

age <- c(16, 45, 23, 82)age# Devuelve 16, 45, 23, 82age[3]# Devuelve 23

Es más común usar números para indexar valores con ciertas posiciones, como en el código anterior. Pero muchos programadores principiantes de R no saben que también se pueden usar condiciones lógicas al indexar. Esto abre todo tipo de posibilidades.

Creemos algunos datos de ejemplo para ilustrar algunas de estas opciones. Esto incluye información sobre usuarios, como la edad, como en los ejemplos anteriores. Pero en lugar de estar almacenada en un vector, la información de cada usuario se almacena en filas en un tibble. Este es el tipo de estructura de datos que es probable que se vea al tratar con datos de usuario en un entorno profesional, por lo que es útil saber cómo aplicar la lógica condicional a ella.

set.seed(123)user_data <- tibble(  user_id = 1:10,  age = floor(runif(10, min = 13, max = 35)),  region = sample(c("Reino Unido", "EE. UU.", "UE"), 10, replace = TRUE))
Los datos creados por el código anterior.

Los tibbles y los data frames están compuestos de vectores, lo que significa que podemos indexarlos de la misma manera. Esto nos permite hacer todo tipo de cosas.

Extracción de valores en una columna basándonos en una condición

Aquí hay un código que extrae cualquier valor de la columna user_id donde la edad del usuario es menor de 18 años.

user_data$user_id[user_data$age < 18]# Retorna 6

Reemplazo de valores en una columna basándonos en una condición

Así es como podemos recodificar todas las filas “UK” en la columna de región como “EU”.

user_data$region[user_data$region == "UK"] <- "EU"

Filtrado de un conjunto de datos con indexación condicional

Incluso podemos usar la selección condicional para filtrar todo el conjunto de datos. Aquí hay un método para filtrar todas las filas donde la región es “USA”. Tenga en cuenta que después de la condición lógica aquí, incluimos una coma para indicarle a R que estamos indexando por fila. Si quisiéramos filtrar por columna, podríamos agregar una condición después de la coma.

user_data[user_data$region == "USA",]
El resultado del código anterior.

Estas son solo algunas aplicaciones de la indexación condicional en R. Si necesita hacer una operación condicional rápida en los datos, es probable que haya una solución de una línea para ello utilizando este método.

Función case_when de Tidyverse

La función case_when es de la familia de paquetes de Tidyverse. Es otra forma de aplicar declaraciones condicionales a un conjunto de muchos valores y, una vez más, es útil cuando se trabaja con conjuntos de datos.

Podemos usar los datos del último ejemplo para mostrar cómo crear una nueva columna basada en declaraciones condicionales con case_when.

user_data %>%  mutate(drinking_age = case_when(region == "USA" & age >= 21 ~ TRUE,                                  region == "EU" & age >= 18 ~ TRUE,                                  .default = FALSE))
El resultado del código anterior, con la nueva columna “drinking_age”.

Este código determina si nuestros usuarios del sitio están legalmente autorizados para beber alcohol basándose en su edad y ubicación. Aquí, cada condición está en una línea diferente en la declaración case_when. Si la condición es verdadera, podemos devolver un valor después del símbolo de tilde (~) – en este caso, TRUE. Si ninguna de las condiciones se cumple, el valor devuelto se especifica en la configuración .default. Todos los valores se almacenan en una nueva columna, drinking_age.

Si esto parece un poco desconocido, aquí está el equivalente en la declaración if else:

if (region == "USA" & age >= 21) {  drinking_age <- TRUE} else if (region == "EU" & age >= 18) {  drinking_age <- TRUE} else {  drinking_age <- FALSE}

Comparado con el código anterior, es fácil ver que case_when proporciona otra forma de implementar declaraciones condicionales que es más concisa que la declaración if-else, mientras que es igual de poderosa. Ahora es mi elección preferida para crear nuevas columnas basadas en lógica compleja o múltiples condiciones. Para los usuarios de tidyverse, es una función obligatoria a adoptar.

Cuándo usar diferentes tipos de declaraciones condicionales

Los métodos que he cubierto realmente empiezan a brillar cuando los pones a trabajar en tu propio código. Solo jugando con nuevos enfoques y familiarizándote con ellos cosecharás todos sus beneficios y lograrás fluidez en la programación en R.

Entonces, ¿cuándo debes usar cada tipo de declaración condicional?

Como con cualquier elección entre enfoques en la programación, no hay una respuesta directa. Dicho esto, aquí hay algunas pautas aproximadas que uso para ayudarme a elegir entre diferentes formas de escribir declaraciones condicionales.

  • Si estoy trabajando en un problema que requiere que se ejecute mucho código complejo y de varias líneas en ciertas condiciones, a menudo prefiero las declaraciones if-else. Usar otros métodos a menudo se vuelve complicado y difícil de mantener en estas situaciones.
  • Para problemas con condiciones más simples y fragmentos de código más cortos para devolver, me gustan las declaraciones if-else en línea. ¡No tiene sentido hacer que una solución sencilla sea más larga de lo necesario!
  • Si estoy trabajando con conjuntos de datos o creando columnas basadas en condiciones, uso case_when. Funciona bien con las otras funciones de tidyverse que uso y es fácil de depurar y mantener.
  • Si estoy trabajando con conjuntos de datos y no quiero cargar paquetes adicionales, usaré indexación condicional. No necesita dependencias adicionales y a menudo se ejecuta rápidamente también.

¿Mi consejo? Juega con cada técnica y ve qué funciona para ti. Como mínimo, podrías encontrar una nueva forma de mejorar tu código.

Entonces, si te gustó este artículo, ¿por qué no compartir tu declaración condicional favorita? Sino… ¡gracias por quedarte hasta el final de todos modos!

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

8 Lenguajes de Programación para Aprender en Ciencia de Datos en 2023

¿Estás interesado en Ciencia de Datos? Este blog te ayudará a iniciar o avanzar en tu carrera en ciencia de datos. Ap...

Aprendizaje Automático

Flujos de trabajo CI/CD sin interrupciones con GitHub Actions en GCP sus herramientas para una eficaz MLOps.

Tutorial sobre cómo implementar un pipeline de aprendizaje automático y una aplicación web en GCP. Construya un pipel...

Inteligencia Artificial

Google Cloud se compromete a proteger a los clientes mediante indemnización de IA generativa

En un movimiento visionario, Google Cloud ha reafirmado su dedicación a los intereses de sus clientes, situándolos en...

Inteligencia Artificial

¿Dónde ocurre la IA?

¿Hacia qué sector deberían dirigirse los investigadores en ciernes? ¿La academia o la industria?

Ciencia de Datos

4 Funciones de Pandas para la comparación elemento a elemento de DataFrames

En este artículo, aprenderemos cuatro funciones diferentes de Pandas que pueden ser utilizadas para estas tareas. Tam...

Inteligencia Artificial

Los peligros de la alucinación de la IA desentrañando los desafíos y las implicaciones

Embárcate en una apasionante exploración de la alucinación de IA desentraña sus causas intrincadas, navega por las co...