x <- 10
4 * x + 5[1] 45
Fundamentos del programa - manipulación de objetos - bucles
R tiene sus orígenes en S, un lenguaje de programación creado en los Laboratorios Bell de Estados Unidos. Sí, los mismos laboratorios que inventaron el transistor, el láser, el sistema operativo Unix y algunas otras cosas más.
Dado que S y sus estándares son propiedad de los Laboratorios Bell, lo cual restringe su uso, Ross Ihaka y Robert Gentleman, de la Universidad de Auckland en Nueva Zelanda, decidieron crear una implementación abierta y gratuita de S. Este trabajo, que culminaría en la creación de R inició en 1992, teniendo una versión inicial del lenguaje en 1995 y en el 2000 una versión final estable.
R hereda muchas características de S, por lo que puedes correr código de este lenguaje usando R sin mayor problema. Para lograr esto, en R frecuentemente existe más de una manera de realizar tareas comunes, una compatible con S y otra diseñada específicamente para R. Lo anterior tiene como resultado inconsistencias, sintaxis poco intuitiva y abundante frustración de cabeza para las personas que quieren aprender R.
R es un sistema para análisis estadísticos y gráficos creado por Ross Ihaka y Robert Gentleman. R tiene una naturaleza doble de programa y lenguaje de programación y es considerado como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell. Puede utilizarse con Windows, pero está disponible también para otros sistemas operativos como Linux o Mac OS. R es muy utilizado por investigadores de todo el mundo debido a la fiabilidad de sus métodos de cálculo y a que se puede descargar de forma libre
R se distribuye bajo una licencia de software libre y es completamente gratuito. El usuario tiene a su disposición una amplia gama de métodos estadísticos y gráficos sencillos y avanzados a un coste cero.
Ha sido creado por matemáticos para matemáticos. Los métodos de cálculo que utiliza son de gran robustez, han sido profesionalmente testados y son revisados y ampliados continuamente.
R se puede personalizar fácilmente mediante paquetes descargables que contienen funciones adicionales. Un investigador de ciencias sociales y otro de ciencias experimentales pueden ambos utilizar R, pero seguramente utilizaran paquetes de funciones completamente diferentes.
Existe una gran comunidad de usuarios de R y se pueden encontrar con facilidad foros y páginas sobre funciones específicas de R en línea.
Aunque podemos usar R directamente, es recomendable instalar y usar un entorno integrado de desarrollo (IDE, por sus siglas en inglés).
Podemos utilizar R ejecutando nuestro código directamente desde documentos de texto plano, pero esta es una manera poco efectiva de trabajar, especialmente en proyectos complejos.
Un IDE nos proporciona herramientas para escribir y revisar nuestro código, administrar los archivos que estamos usando, gestionar nuestro entorno de trabajo y algunas otras herramientas de productividad. Tareas que serían difíciles o tediosas de realizar de otro modo, son fáciles a través de un IDE.
Hay varias opciones de IDE para R, y entre ellas una de las preferidas por el público es RStudio. Este entorno, además de incorporar las funciones esenciales de una IDE, es desarrollado por un equipo que ha contribuido de manera significativa para lograr que R sea lenguaje de programación más accesible, con un énfasis en la colaboración y la reproducción de los análisis.
Para instalar RStudio, es necesario con descargar y ejecutar alguno de los instaladores disponibles en su sitio oficial. Están disponibles versiones para Windows, OSX y Linux.
Si ya hemos instalado R en nuestro equipo, RStudio lo detectará automáticamente y podremos utilizarlo desde este entorno. Si no instalamos RStudio antes que R, no hay problema, cada vez que iniciamos este programa, verificará la instalación de R.
Entre las principales características de Rstudio podemos destacar lo siguiente:
IDE construido exclusivo para R
El resaltado de sintaxis, auto completado de código y sangría inteligente.
Ejecutar código R directamente desde el editor de código fuente.
Salto rápido a las funciones definidas.
Colaboración
Documentación y soporte integrado.
Administración sencilla de múltiples directorios de trabajo mediante proyectos.
Navegación en espacios de trabajo y visor de datos.
Potente autoría y depuración.
Depurador interactivo para diagnosticar y corregir los errores rápidamente.
Herramientas de desarrollo extensas.
Autoría con Sweave y R Markdown.
La programación orientada a objetos es un modelo de programación en el que el diseño de software se organiza alrededor de datos u objetos, en vez de usar funciones y lógica. Se enfoca en los objetos que los programadores necesitan manipular, en lugar de centrarse en la lógica necesaria para esa manipulación. Un objeto se puede definir como un campo de datos con atributos y comportamientos únicos.
Por tanto, la principal característica de este tipo de programación es que soporta objetos, que tienen un tipo o clase asociado. Esas clases pueden heredar atributos de una clase superior o superclase. Por esa razón, este enfoque de programación se utiliza en programas grandes y complejos que se deben actualizar con cierta regularidad.
En la actualidad existen diferentes lenguajes de programación orientada a objetos, como C++, Objective C, Java, Ruby, Visual Basic, Visual C Sharp, Simula, Perl, TypeScript, Smalltalk, PHP o Python. C++ y Java son los dos lenguajes de programación orientada a objetos más usados.
Por otra parte, Python, PHP y Ruby son otros lenguajes de programación orientada a objetos muy populares, aunque más enfocados en la programación, desarrollo web y de aplicaciones para móviles.
Por supuesto, existen otros lenguajes de programación orientada a objetos de carácter más específico, como es el caso de ADA, que tiene un enfoque en la seguridad y está basado en un tipado muy fuerte, por lo que se usa para desarrollar aplicaciones de defensa, gestión de tráfico aéreo y en la industria aeroespacial.
Reutilización del código heredado. Cuando se diseñan correctamente las clases, se pueden usar en distintas partes del programa y en diferentes proyectos. La técnica de herencia ahorra tiempo porque permite crear una clase genérica y luego definir las subclases que heredarán los rasgos de la misma, de manera que no es necesario escribir esas funciones de nuevo. Además, al aplicar un cambio en la clase, todas las subclases lo adoptarán automáticamente.
Mayor modificabilidad. Otra de las ventajas de la programación orientada a objetos es que permite añadir, modificar o eliminar nuevos objetos o funciones fácilmente para actualizar los programas, lo cual implica un ahorro de tiempo y esfuerzo para los programadores.
Facilidad para detectar errores en el código. En los lenguajes de programación orientada a objetos no es necesario revisar línea por línea del código para detectar un error. Gracias a la encapsulación los objetos son autónomos, de manera que es más fácil abstraer un problema y saber dónde buscar el error cuando algo no funciona bien.
Modularidad. Una de las características de la programación orientada a objetos más interesantes es la modularidad ya que así un equipo puede trabajar en múltiples objetos a la vez mientras se minimizan las posibilidades de que un programador duplique la funcionalidad de otro. El trabajo modular también permite dividir los problemas en partes más pequeñas que se pueden probar de manera independiente.
Flexibilidad gracias al polimorfismo. El polimorfismo de la programación orientada a objetos permite que una sola función pueda cambiar de forma para adaptarse a cualquier clase donde se encuentre. De esta forma se ahorra tiempo de programación y se gana en versatilidad.
En los lenguajes de programación orientada a objetos también es habitual crear librerías y compartirlas o reutilizar librerías de otros proyectos, lo cual ahorra horas de desarrollo, algo particularmente importante en grandes proyectos ya que conduce a una reducción de costes.
La manipulación de objetos se refiere a la capacidad de crear, modificar, acceder y utilizar objetos en un programa. Los objetos son elementos fundamentales en la programación orientada a objetos (POO), que es un paradigma de programación ampliamente utilizado en el desarrollo de software.
Concepto de Objeto: En programación orientada a objetos, un objeto es una instancia de una clase. Una clase es una plantilla o un plano que define la estructura y el comportamiento de los objetos. Los objetos son entidades que encapsulan datos (atributos) y funciones (métodos) que operan en esos datos.
Atributos: Los atributos son variables que almacenan datos relacionados con un objeto. Por ejemplo, si tienes una clase “Coche”, los atributos podrían incluir el color, la marca, el modelo, etc.
Métodos: Los métodos son funciones asociadas a un objeto que definen su comportamiento. Por ejemplo, un objeto “Coche” podría tener métodos como “acelerar”, “frenar” y “girar”.
Creación de Objetos: Para crear un objeto en programación, primero debes instanciar una clase. Esto se hace utilizando una sentencia como new en lenguajes como Java, C++, o mediante constructores en otros lenguajes de programación.
Acceso a Atributos y Métodos: Para acceder a los atributos y métodos de un objeto, se utiliza la notación de punto (por ejemplo, objeto.atributo o objeto.metodo()). Esto permite interactuar con los datos y el comportamiento del objeto.
Encapsulamiento: El encapsulamiento es un concepto importante en la POO que se refiere a la ocultación de los detalles internos de un objeto. Los atributos suelen ser privados y solo se accede a ellos a través de métodos públicos. Esto ayuda a mantener la integridad de los datos y a controlar cómo se manipulan.
Herencia: La herencia es un mecanismo que permite que una clase (llamada subclase o clase derivada) herede atributos y métodos de otra clase (clase base o superclase). Esto promueve la reutilización de código y permite crear jerarquías de clases.
Polimorfismo: El polimorfismo es la capacidad de los objetos de diferentes clases de responder a la misma interfaz de manera diferente. Esto permite tratar objetos de clases diferentes de manera uniforme.
Abstracción: La abstracción es el proceso de simplificar y modelar objetos del mundo real en términos de clases y objetos en un programa. Ayuda a reducir la complejidad y a centrarse en los aspectos relevantes de un problema.
La manipulación de objetos en programación es fundamental para crear programas modularizados, flexibles y fáciles de mantener. La programación orientada a objetos se utiliza ampliamente en el desarrollo de software moderno debido a su capacidad para modelar sistemas complejos de manera más comprensible y eficiente.
La manipulación de objetos en R se refiere a la capacidad de trabajar con objetos y datos en el lenguaje de programación R. R es un lenguaje ampliamente utilizado en estadísticas y análisis de datos, y su flexibilidad y potencia radican en su capacidad para crear, manipular y analizar objetos de datos de diversas formas. Aquí hay algunas formas comunes de manipulación de objetos en R:
Creación de objetos: En R, puedes crear objetos que almacenan datos. Los tipos de objetos más comunes incluyen vectores, matrices, listas, data frames y factores.
Manipulación de vectores y matrices: R ofrece una amplia gama de funciones para realizar operaciones en vectores y matrices, como la suma, la multiplicación, la transposición y la selección de elementos específicos.
Manipulación de listas: Las listas son objetos versátiles que pueden contener elementos de diferentes tipos y estructuras. Puedes acceder y modificar los elementos de una lista de diversas maneras.
Manipulación de data frames: Los data frames son objetos tabulares que se utilizan comúnmente para almacenar datos en R. Puedes realizar operaciones como la selección de columnas, la filtración de filas y la unión de data frames.
Manipulación de factores: Los factores son utilizados para representar variables categóricas en R. Puedes modificar los niveles de un factor y realizar otras operaciones relacionadas con ellos.
Funciones para la manipulación de objetos: R proporciona numerosas funciones y operadores que permiten realizar operaciones en objetos de datos, como la indexación, la subconjunción, la agregación y la transformación.
Paquetes y bibliotecas: R tiene una amplia variedad de paquetes y bibliotecas diseñados para la manipulación avanzada de datos. Algunos ejemplos incluyen dplyr, tidyr y reshape2, que facilitan la manipulación de datos en data frames.
La manipulación de objetos en R es fundamental para realizar análisis de datos, preparar datos para su modelado y realizar tareas de visualización. Los usuarios de R a menudo combinan estas técnicas para realizar análisis de datos avanzados y generar informes y visualizaciones que ayuden a tomar decisiones informadas.
Los tipos de objetos en R se conocen en la comunidad como clases. Existen muchas clases de objetos, pero las clases más sencillas son 5:
numeric: números reales o decimales
integer: números enteros complex: números complejos
character: carácteres
logical: resultados lógicos (TRUE o FALSE)
Los objetos pueden combinarse para crear otros nuevos. Es más, hay objetos que tienen otros objetos que los conforman y cada uno puede ser de diferente clase. Así también tendremos otras clases para objetos compuestos, por ejemplo,
list: listas
matrix: matriz
array: colección de objetos
data.frame: base de datos
Las variables sirven para almacenar un valor que luego vamos a utilizar en algún procedimiento.
Para hacer la asignación de un valor a alguna variable se utiliza el operador <- entre el valor y el nombre de la variable. A continuación un ejemplo sencillo.
x <- 10
4 * x + 5[1] 45
En el siguiente ejemplo se crea la variable auto y se almacena el nombre Toyota, luego se averigua el número de caracteres de la variable auto.
auto <- "Toyota"
nchar(auto)[1] 6
Los vectores en R son objetos de una única dimensión que puede contener datos numéricos, cadena de caracteres o datos lógicos, entre otros. Esencialmente son uno de los elementos básicos en la estructura de los datos en R. Pueden contener solo elementos de un solo tipo, aunque su tamaño podría ser ilimitado.
Construcción de vectores
Para R un vector es una lista ordenada de datos de un mismo tipo. Dispone de una serie de funciones para definirlos:
c: Sirve para concatenar datos.
scan: Permite leer o importar datos.
rep, seq: Vectores específicos.
Ejemplos:
Función c
x <- c( 1, 2, 3, 4)
x[1] 1 2 3 4
ABC <- c("a”, ”b”, ”d")
ABC[1] "a”, ”b”, ”d"
Función rep
Esta función sirve para construir vectores repitiendo datos o vectores. Para definir un vector constante basta con utilizar la función rep(x,n) donde n es la cantidad de veces que queremos repetirlo. Pero si queremos aplicarla a vectores:
rep(vector, times=n): Repite n veces el vector en bloque.
rep(vector, each=n): Repite n veces cada entrada del vector.
A continuación vamos a ver varios ejemplos con cada uno de ellos:
rep("a", 20) [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a"
[20] "a"
rep (x, times =20) [1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2
[39] 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
[77] 1 2 3 4
rep(c(1, 2, 3, 4), times = c( 5, 10, 15, 20)) [1] 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
[39] 4 4 4 4 4 4 4 4 4 4 4 4
Como se puede ver en la última función podemos combinarla con la función c para concatenar la repetición de los distintos datos y además es importante no olvidarse de entrecomillar el texto.
Función seq
Permite construir progresiones aritméticas. Sus usos básicos son los siguientes:
seq(a,b, by=r): de a b con paso r.
seq(a, by=r, length.out=n): a partir de a, de longitud n con paso r.
Se pueden encontrar otros usos en la ayuda de la función. Ahora vamos a mostrar un ejemplo de cada uno de los usos:
seq (0, 120, by=5) [1] 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90
[20] 95 100 105 110 115 120
seq (100, 17, by = -5) [1] 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20
seq (0, by=5, length.out =20) [1] 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
Función scan
Esta función nos permite:
scan(): Permite entrar en consola la lista de datos.
scan(fichero): Define un vector a partir del fichero.
¿Cómo extraer elementos de un vector?
Para extraer un elemento almacenado dentro un vector se usan los corchetes [] y dentro de ellos la posición o posiciones que interesan.
edad <- c(22, 18, 17, NA, 20)
deporte <- c(TRUE, TRUE, NA, FALSE, TRUE)
equipos_fav <- c(NA, 'Bayer Munich', 'Chelsea', NA, 'Real Madrid')edad[2][1] 18
deporte[-2][1] TRUE NA FALSE TRUE
equipos_fav[c(3, 5)][1] "Chelsea" "Real Madrid"
Las matrices son arreglos rectangulares de filas y columnas con información numérica, alfanumérica o lógica. Para construir una matriz se usa la función matrix( ). Por ejemplo, para crear una matriz de 4 filas y 5 columnas (de dimensión 4 × 5 ) con los primeros 20 números positivos se escribe el código siguiente en la consola.
Construcción de matrices
Las matrices son tablas rectangulares de un mismo tipo, normalmente números. Hay dos maneras distintas que tiene R para construir matrices. Es importante que todas sus entradas sean del mismo tipo de datos. Podemos construir matrices con las siguientes funciones:
matrix(vector,…): Construye una matriz con las entradas del vector. Tiene los siguientes parámetros básicos:
byrow: Indica si se organizan por filas (TRUE), o por columnas (FALSE).
nrow o ncol: Número de filas o de columnas.
Vamos a proceder a construir una matriz sencilla con esta función:
x <- 1:12
matrix(x, nrow=3) [,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
matrix(x, nrow=3, byrow = TRUE) [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
Esta función es útil para representar matrices constantes. Otra manera de construir matrices es mediante la concatenación de vectores, y se realiza mediante las siguientes funciones:
cbind: Concatena matrices y vectores por columnas.
rbind: Concatena matrices y vectores por filas.
En ambos casos las dimensiones han de ser adecuadas. Vamos a proceder a ver un ejemplo con estas funciones:
a <- 1:4
b <- c (1, 3, 5, 7)
c <- rep (0, 4)
rbind (a, b, c) [,1] [,2] [,3] [,4]
a 1 2 3 4
b 1 3 5 7
c 0 0 0 0
cbind (a, b, c) a b c
[1,] 1 1 0
[2,] 2 3 0
[3,] 3 5 0
[4,] 4 7 0
Funciones para matrices
Funciones relacionadas con las dimensiones de las matrices:
nrow: Número de filas.
ncol: Número de columnas.
dim: Vector con ambas dimensiones.
Vamos a realizar un ejemplo con estas funciones básicas:
A <- matrix(1:30, nrow = 5)
A [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 6 11 16 21 26
[2,] 2 7 12 17 22 27
[3,] 3 8 13 18 23 28
[4,] 4 9 14 19 24 29
[5,] 5 10 15 20 25 30
nrow(A)[1] 5
ncol(A)[1] 6
dim(A)[1] 5 6
Podremos utilizar algunas funciones que se utilizan para vectores como sum, prod, mean,…, también podemos aplicar las funciones a las filas o columnas de la matriz. Como por ejemplo, podremos aplicar las siguientes funciones:
colSums: Vector de sumas de columnas.
rowSums: Vector de sumas de filas.
colMeans: Vector de medias de columnas.
rowMeans: Vector de medias de filas.
Vamos a aplicar estas funciones al ejemplo anterior:
mean(A)[1] 15.5
rowSums(A)[1] 81 87 93 99 105
colMeans(A)[1] 3 8 13 18 23 28
Un arreglo es una matriz de varias dimensiones con información numérica, alfanumérica o lógica. Para construir una arreglo se usa la función array( ). Por ejemplo, para crear un arreglo de 3 × 4 × 2 con 24 numeros se escribe el siguiente código.
miarray <- array(data=1:24, dim=c(3, 4, 2))El argumento data de la función sirve para indicar los datos que se van a almacenar en el arreglo y el argumento dim sirve para indicar las dimensiones del arreglo. Para observar lo que quedó almacenado en el objeto miarray se escribe en la consola lo siguiente.
miarray, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
¿Cómo extraer elementos de un arreglo?
Para recuperar elementos almacenados en un arreglo se usan también corchetes, y dentro de los corchetes, las coordenadas del objeto de interés.
Ejemplo
Si queremos extraer el número almacenado en la fila 1 y columna 3 de la segunda capa de miarray usamos el siguiente código.
miarray[1, 3, 2] # El orden es importante[1] 19
Si queremos extraer la segunda capa completa usamos el siguiente código.
miarray[,, 2] # No se coloca nada en las primeras posiciones [,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
Si queremos extraer la tercera columna de todas las capas usamos el siguiente código.
miarray[, 3,] # No se coloca nada en las primeras posiciones [,1] [,2]
[1,] 7 19
[2,] 8 20
[3,] 9 21
¿Qué es indentación?
La identación en R se refiere al uso de espacios o tabulaciones al principio de las líneas de código para estructurar y organizar un programa R de manera legible. La identación es una parte importante de la convención de estilo y la programación limpia en R. Ayuda a los programadores y a otros que lean el código a comprender la estructura y la jerarquía del código de manera más clara.
En R, la identación se utiliza principalmente para indicar bloques de código, como bucles, condicionales (if, else), funciones y estructuras de control. Aquí tienes un ejemplo de cómo se utiliza la identación en R:
for (i in 1:5) {
if (i %% 2 == 0) {
cat("El número", i, "es par.\n")
} else {
cat("El número", i, "es impar.\n")
}
}El número 1 es impar.
El número 2 es par.
El número 3 es impar.
El número 4 es par.
El número 5 es impar.
En este ejemplo, las líneas de código dentro del bucle for están indentadas con respecto a la línea que inicia el bucle, y las líneas dentro de los condicionales if y else también están indentadas con respecto a sus respectivas líneas de inicio. Esto hace que sea claro cuáles son las partes del código que se ejecutan dentro de cada bloque.
La identación en R es una buena práctica de programación que ayuda a escribir código más legible y facilita el mantenimiento y la colaboración en proyectos de programación.
Las expresiones condicionales, como if, if-else, elif y operadores lógicos como or, and y not, son fundamentales en programación. Permiten que un programa tome decisiones basadas en condiciones específicas. En R, las expresiones condicionales son fundamentales para controlar el flujo de un programa, permitiendo que ciertas partes del código se ejecuten o se omitan dependiendo de si se cumple una condición.
En R, puedes utilizar las siguientes estructuras:
if: Permite ejecutar un bloque de código si una condición es verdadera. Por ejemplo, para imprimir “Es cierto” si x es mayor que 10:
x <- 12
if (x > 10) {
print("Es cierto")
}[1] "Es cierto"
if-else: Te permite ejecutar un bloque de código si la condición es verdadera y otro bloque si es falsa. Por ejemplo, para imprimir “Es cierto” si x es mayor que 10 y “Es falso” si no lo es:
x <- 7
if (x > 10) {
print("Es cierto")
} else {
print("Es falso")
}[1] "Es falso"
else if (elif): Puedes usar múltiples condiciones en cascada utilizando else if para evaluar diferentes casos. Por ejemplo:
x <- 5
if (x > 10) {
print("Es mayor que 10")
} else if (x > 5) {
print("Es mayor que 5 pero no mayor que 10")
} else {
print("Es 5 o menor")
}[1] "Es 5 o menor"
Operadores lógicos: Puedes combinar condiciones con operadores lógicos como && (and), || (or), y ! (not) para formar expresiones condicionales más complejas. Por ejemplo:
Operador lógico AND (&&): Este operador devuelve TRUE si ambas condiciones son verdaderas.
a <- 5
b <- 7
resultado <- (a > 3 && b < 10)
print(resultado) # Esto imprimirá TRUE porque ambas condiciones son verdaderas.[1] TRUE
Operador lógico OR (||): Este operador devuelve TRUE si al menos una de las condiciones es verdadera.
x <- 2
y <- 12
resultado <- (x > 5 || y > 10)
print(resultado) # Esto imprimirá TRUE porque la segunda condición es verdadera.[1] TRUE
Operador lógico NOT (!): Este operador invierte el valor de verdad de una expresión. Si la expresión es verdadera, ! la convierte en falsa, y viceversa.
a <- TRUE
b <- FALSE
resultado_a <- !a
resultado_b <- !b
print(resultado_a) # Esto imprimirá FALSE[1] FALSE
print(resultado_b) # Esto imprimirá TRUE[1] TRUE
Estas son algunas de las estructuras condicionales básicas en R que te permiten controlar el flujo de tu programa en función de las condiciones especificadas.
Un bucle es una estructura de control utilizada para repetir un conjunto de instrucciones múltiples veces. Los bucles se aplican cuando se requiere realizar tareas repetitivas, como iterar a través de una colección de elementos, realizar cálculos en series de datos o ejecutar una operación hasta que se cumpla una condición específica. R ofrece diversos tipos de bucles, pero los más comunes son el bucle “for” y el bucle “while”.
La construcción de bucles es una parte fundamental de la programación que permite automatizar tareas repetitivas. En R, como en muchos otros lenguajes de programación, hay varias formas de construir bucles, pero los dos tipos más comunes son el bucle “for” y el bucle “while”.
Un bucle “for” se utiliza cuando se conoce de antemano cuántas veces se debe repetir una tarea.
Normalmente, consta de tres partes: la inicialización, la condición y la expresión de iteración.
for (i in 1:5) {
# Código que se repetirá 5 veces
print(i)
}[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
En este ejemplo, el bucle “for” imprimirá los números del 1 al 5.
Bucle “while”:
Un bucle “while” se utiliza cuando no se sabe cuántas veces se repetirá una tarea, pero se ejecutará siempre que se cumpla una condición.
En cada iteración, se evalúa la condición y, si es verdadera, se ejecutan las instrucciones del bucle.
x <- 1
while (x <= 5) {
# Código que se repetirá mientras x sea menor o igual a 5
print(x)
x <- x + 1
}[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
En este caso, el bucle “while” imprimirá los números del 1 al 5 al aumentar gradualmente el valor de x.
La elección entre un bucle “for” y un bucle “while” depende de la naturaleza de la tarea que estés automatizando. Si conoces de antemano cuántas veces se debe repetir una tarea, un bucle “for” es más conveniente. Si la repetición depende de una condición, un bucle “while” es la elección adecuada. Es importante tener cuidado al usar bucles para evitar bucles infinitos, donde la condición nunca se cumple, lo que podría bloquear tu programa.
Un bucle repeat se utiliza cuando deseas crear un bucle infinito o semipermanente que se ejecutará hasta que se encuentre una declaración de salida, como break.
Puedes usarlo cuando no sabes cuántas veces se ejecutará el bucle o cuando necesitas un bucle que se ejecute hasta que se cumpla una condición específica.
x <- 1
repeat {
# Código que se ejecutará infinitamente hasta que se alcance una condición
print(x)
x <- x + 1
if (x > 5) {
break # Termina el bucle si x es mayor que 5
}
}[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
En este ejemplo, el bucle repeat imprimirá los números del 1 al 5 y se detendrá cuando x sea mayor que 5.
El bucle repeat es útil cuando necesitas un control más flexible sobre cuándo se debe salir del bucle. Sin embargo, debes tener cuidado para asegurarte de que haya una forma de terminar el bucle, ya que de lo contrario, podría ejecutarse indefinidamente. El uso de declaraciones de salida como break es fundamental para controlar la ejecución de bucles repeat
Las declaraciones de control son utilizadas para controlar el flujo de ejecución de un programa.Estas declaraciones permiten tomar decisiones, crear bucles y realizar acciones específicas en función de ciertas condiciones, asimismo las estructuras de control nos permiten controlar la manera en la que es ejecutado nuestro código. Esto es de gran utilidad para determinar la lógica y el orden en que ocurren las operaciones, en especial al definir funciones.
| Declaración | Uso | Ejemplo |
|---|---|---|
if |
Ejecuta código si una condición es verdadera. | if (condicion) { codigo } |
else |
Ejecuta código si la condición if es falsa. |
if (condicion) { } else { otro_codigo } |
else if |
Proporciona múltiples condiciones en una estructura if. |
if (cond1) { codigo1 } else if (cond2) { codigo2 } |
while |
Crea un bucle que se ejecuta mientras una condición es verdadera. | while (condicion) { codigo } |
for |
Itera sobre una secuencia de valores o elementos. | for (variable in secuencia) { codigo } |
repeat |
Crea un bucle infinito. | repeat { codigo; if (condicion) { break } } |
next |
Salta a la siguiente iteración de un bucle. | for (i in 1:10) { if (i %% 2 == 0) { next }; ... } |
break |
Sale prematuramente de un bucle. | for (i in 1:10) { if (i == 7) { break }; ... } |
Las declaraciones de control más usadas en R son las siguientes.
Declaración if:
La declaración if se utiliza para ejecutar un bloque de código si una condición es verdadera. Si la condición es falsa, el bloque de código no se ejecuta.
x <- 10
if (x > 5) {
print("x es mayor que 5")
} else {
print("x no es mayor que 5")
}[1] "x es mayor que 5"
Declaración for:
La declaración for se utiliza para ejecutar un bucle un número específico de veces.
for (i in 1:5) {
print(paste("Iteración número", i))
}[1] "Iteración número 1"
[1] "Iteración número 2"
[1] "Iteración número 3"
[1] "Iteración número 4"
[1] "Iteración número 5"
Declaración while:
La declaración while se utiliza para ejecutar un bucle mientras una condición sea verdadera.
i <- 1
while (i <= 5) {
print(paste("Iteración número", i))
i <- i + 1
}[1] "Iteración número 1"
[1] "Iteración número 2"
[1] "Iteración número 3"
[1] "Iteración número 4"
[1] "Iteración número 5"
Declaración repeat:
La declaración repeat se utiliza para crear un bucle infinito que debe ser interrumpido explícitamente con la declaración break.
i <- 1
repeat {
print(paste("Iteración número", i))
i <- i + 1
if (i > 5) {
break
}
}[1] "Iteración número 1"
[1] "Iteración número 2"
[1] "Iteración número 3"
[1] "Iteración número 4"
[1] "Iteración número 5"
Declaración switch:
La declaración switch se utiliza para tomar una decisión basada en múltiples opciones.
fruta <- "manzana"
resultado <- switch(
fruta,
"manzana" = "Es una fruta roja",
"plátano" = "Es una fruta amarilla",
"uva" = "Es una fruta morada",
"default" = "No conozco esta fruta"
)
print(resultado)[1] "Es una fruta roja"
Estos son ejemplos básicos de declaraciones de control en R. Puedes utilizar estas estructuras para controlar el flujo de ejecución de tu programa según las condiciones y necesidades específicas de tu tarea.
Los fundamentos del programa en R - RStudio son vitales para la creación de soluciones efectivas en análisis de datos y estadísticas. Estos fundamentos, que incluyen la programación orientada a objetos, la manipulación de objetos, la indentación, las expresiones condicionales y los bucles, son esenciales para:
Organizar y estructurar eficazmente el código y abordar problemas complejos en el análisis de datos.
Tomar decisiones basadas en condiciones lógicas
Proporcionar a los analistas de datos las herramientas necesarias para crear flujos de trabajo flexibles y automatizar tareas, lo que ahorra tiempo y aumenta la precisión en la toma de decisiones basadas en datos.
Modelar datos de manera que reflejen objetos del mundo real, facilitando la interpretación y el procesamiento de información.
Desarrollar aplicaciones personalizadas y sofisticadas para satisfacer necesidades específicas en el análisis de datos.
Dominar estos conceptos permite a los profesionales de datos y estadísticas aprovechar al máximo las capacidades de R y RStudio, creando soluciones efectivas para la toma de decisiones informadas en una variedad de campos, desde la investigación científica hasta el análisis de negocios. Estos fundamentos son los pilares del éxito en el mundo del análisis de datos.