Examen parcial de Lenguaje de programación estadística

Author

Grupo 9

Examen parcial

Integrantes:

  • Porlles Castillo Sharif Snyder

  • Vargas Magallanes Andersson

  • Chuqui Diaz Gianpier Genaro

  • Pilco Valvas Jordan Joel

  • Cusi Ccaihuari Diego Oswaldo

I. Fundamentos de la programación

a) ¿Qué es R?

R es un lenguaje de programación y entorno de software de código abierto diseñado específicamente para estadísticas y análisis de datos. Fue creado en 1995 por Ross Ihaka y Robert Gentleman en la Universidad de Auckland, Nueva Zelanda. Se caracteriza por su facilidad para manejar y analizar datos estadísticos, la capacidad de crear gráficos, la flexibilidad con la que cuenta, ser un IDE, etc.

b) ¿Que es un IDE - RStudio?

Un entorno de desarrollo integrado (IDE) es un aplicación de tipo software que combina en un solo lugar todas las herramientas necesarias para realizar un proyecto de desarrollo de software, así ayudando a los programadores a desarrollar código de software de manera eficiente. Aumenta la productividad de los desarrolladores al combinar capacidades como editar, crear, probar y empaquetar software en una aplicación fácil de usar.

Con esta breve explicación de un IDE, podemos hablar de R-Studio, es un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, dedicado a la computación estadística y gráficos. Incluye una consola, editor de sintaxis que apoya la ejecución de código, así como herramientas para el trazado, la depuración y la gestión del espacio de trabajo.

Características del R Studio

  • Editor de código fuente:

    El resaltado de sintaxis, auto completado de código, sangría inteligente y salto rápido a las funciones definidas asi como ejecutar código R directamente desde el editor de código fuente.

  • Colaboración:

    Documentación y soporte integrado con una administración sencilla de múltiples directorios de trabajo mediante proyectos y con 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 con ayuda de herramientas de desarrollo extensas. Incluye autoría con Sweave y R Markdown.

c) Definir Programación orientada a objetos

Programación orientada a objetos

La Programación Orientada a Objetos (POO) Es un paradigma de programación ampliamente utilizado que se basa en la organización de datos y funcionalidades en unidades llamadas “objetos”. En R, un lenguaje conocido por su enfoque en el análisis de datos y estadísticas, la POO ofrece una forma eficiente y estructurada de gestionar y manipular datos. Este trabajo de investigación explora en profundidad los conceptos de la POO en R, incluyendo la definición de clases, la creación de objetos y la implementación de métodos. Además, se presenta un ejemplo práctico de cómo aplicar estos conceptos en un contexto real.

Principios de la Programación Orientada a Objetos en R

La POO en R se rige por los siguientes principios:

  1. ClaseUna clase es una plantilla que define la estructura de un objeto, especificando los atributos y métodos que contendrá. Las clases en R se crean utilizando la función setClass().

  2. Objeto: Un objeto es una instancia de una clase y contiene datos específicos para ese objeto. Los objetos se crean mediante la función new().

  3. MétodoUn método es una función asociada a una clase que define el comportamiento de los objetos de esa clase. Los métodos en R se definen utilizando la función setMethod().

II. Manipulación de objetos

a) ¿Qué es la manipulación de objetos?

Se refiere al conjunto de operaciones destinadas a la creación, modificación y manipulación de diversos tipos de datos. Esto abarca desde la asignación de valores a variables, hasta la creación de estructuras de datos como vectores, matrices, listas y data frames. Adicionalmente, implica llevar a cabo operaciones y aplicar funciones específicas para manipular estos objetos de manera efectiva.

b) Definir y ejemplificar Clases, objetos, matrices, arreglos, vectores

1. Clases

Las clases de objetos en Rstudio nos ayudan a clasificar nuestro objeto, ya sea caracter, numérico, entero, complejo o lógico (TRUE o FALSE). Algunos ejemplos de clases son:

Carácter

class("Hello world")
[1] "character"

Numérico:

class(5)
[1] "numeric"

Lógico

class(TRUE)
[1] "logical"

2. Objetos

El objeto, es el concepto principal sobre el cual se fundamenta la tecnología orientada a objetos. El objeto puede almacenar y visualizarse como una entidad que posee atributos y efectúa acciones. Ejemplos de objetos en R incluyen las funciones, creación de objetos asignando valores a variables y Symbols.

# creacion de objetos
# Asignacion de una variable
variable <- 42
vector <- c(1.5, 2.5, 3.5, 4.5, 5.5)
Datos <- data.frame(nombre = c("Pedro", "Jairo", "Luana"), edad = c(15, 19, 22))
# creacion de objetos
# Funcion

funcion <- function(x,y) {
    x + y
}
funcion(3,1)
[1] 4
# creacion de objetos
# Symbols

x <- 5
x
[1] 5
a <- 6
a
[1] 6

3. Vectores

Los vectores son colecciones de datos del mismo tipo, es una estructura homogenea, pueden estar formados por 1 dato o varios datos. Son de los elementos mas basicos del R y, posee clases de vectores de acuerdo a la clase de datos que posean

#Ejemplos con vectores


edades <- c(15, 19, 22, 30, 33, 20)

Gimnasio <- c(TRUE, FALSE, FALSE, FALSE, TRUE, TRUE)

4. Matriz

Es un vector multidimensional, como los vectores pueden contener datos de una sola clase, esta organizado en filas y columnas.

#Ejemplos con matriz

matriz_1 <- matrix(data=1:15, nrow = 3, ncol = 5, byrow = FALSE)
matriz_1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15
matriz_2 <- matrix(c(1,2,3,4,5,6,7,8,9,10), nrow = 4, ncol = 5, byrow = FALSE)
matriz_2
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9    3    7
[2,]    2    6   10    4    8
[3,]    3    7    1    5    9
[4,]    4    8    2    6   10

5. Arreglo

Es una matriz de varias dimensiones con informacion numerica, alfanumerica o logica. Se emplean para representar datos multidimensinales de un único tipo, al igual que las matrices y los vectores.

#Ejemplos con arreglos

arreglo_1 <- array(data = letters[1:24], dim = c(3,4,2))
arreglo_1
, , 1

     [,1] [,2] [,3] [,4]
[1,] "a"  "d"  "g"  "j" 
[2,] "b"  "e"  "h"  "k" 
[3,] "c"  "f"  "i"  "l" 

, , 2

     [,1] [,2] [,3] [,4]
[1,] "m"  "p"  "s"  "v" 
[2,] "n"  "q"  "t"  "w" 
[3,] "o"  "r"  "u"  "x" 

c) ¿Qué es indentación?

Consiste en los espacios o tabulaciones que se agregan al principio de una línea de código para definir su estructura y jerarquía en un programa. Esto ayuda a la legibilidad y entendimiento del código. En R no tiene un papel tan importante como por ejemplo en Python, en cambio, se usan los “{ }”.

Ejemplo:

x=9
if (x>10) {
  print("La condición es verdadera")
} else {
  print("La condición es falsa")
}
[1] "La condición es falsa"

d) Detallar las expresiones condicionales (if, ifelse, elif, or ,and, not, entre otros)

Expresión condicional “if” en R

Usaremos if (si) cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple y else (de otro modo), para indicarle a R qué hacer en caso que la condición “if” no se cumpla.

La forma o modelo para un “if”:

if(Condición) {
  operaciones_si_la_condición_es_TRUE
}

Ejemplo del modelo “if”:

# Se cumple la condición y se muestra "La desigualdad es verdadera"
if(20 > 14) {
  "La desigualdad es verdadera"
}
[1] "La desigualdad es verdadera"
# No se cumple la condición y no pasa nada
if(9 > 13) {
  "La desigualdad es verdadera"
}

La forma o modelo para un “if” con “else”:

if(condición) {
  operaciones_si_la_condición_es_TRUE 
} else {
  operaciones_si_la_condición_es_FALSE
}

Ejemplo para el modelo “if” con “else”:

# Se cumple la condición y se muestra "La desigualdad es verdadera"
if(20 > 14) {
  "La desigualdad es verdadera"
} else {
  "La desigualdad es falsa"
}
[1] "La desigualdad es verdadera"
# No se cumple la condición y se muestra "La desigualdad es falsa"
if(9 > 13) {
  "La desigualdad es verdadera"
} else {
  "La desigualdad es falsa"
}
[1] "La desigualdad es falsa"

Expresión del Condicional “ifelse” en R

En el lenguaje de programación R, el condicional ifelse es una herramienta poderosa que permite realizar evaluaciones condicionales y aplicar diferentes acciones según si se cumple o no una condición. En este documento, vamos a explorar en detalle cómo funciona ifelse y cómo se utiliza en R.

Estructura Básica

La expresión ifelse en R tiene la siguiente estructura básica:

ifelse(condición, valor_si_cierto, valor_si_falso)

Ejemplo:

# Crear un vector de ingresos de venta de productos
ingresos <- c(1200, 450, 750, 300, 1100)

# Aplicar la clasificación utilizando ifelse
categorías <- ifelse(ingresos >= 1000, "Categoría A",
                     ifelse(ingresos >= 500, "Categoría B", "Categoría C"))

# Mostrar el resultado
resultados <- data.frame(Producto = 1:length(ingresos), Ingresos = ingresos, Categoría = categorías)
print(resultados)
  Producto Ingresos   Categoría
1        1     1200 Categoría A
2        2      450 Categoría C
3        3      750 Categoría B
4        4      300 Categoría C
5        5     1100 Categoría A

Expresión del Condicional “Elif” en R

En R, la expresión else if es una extensión de la estructura condicional if-else, que permite evaluar múltiples condiciones en orden, ejecutando el bloque de código vinculado a la primera condición que sea verdadera. En caso de que ninguna condición sea verdadera, se ejecuta el bloque de código asociado al else (si está presente).

Ejemplo:

numero <- 0

if (numero > 0 ) {
  mensaje <- "El número es positivo"
} else if (numero == 0) {
  mensaje <- "El número es 0"
} else {
  mensaje <- "El número es negativo"
}

cat("Tu número es:", numero, "\n")
Tu número es: 0 
cat("Resultado:", mensaje, "\n")
Resultado: El número es 0 

Operador lógico “or” en R

Es un operador lógico que permite trabajar con valores de tipo booleano. El operador “or” devuelve “True” cuando al menos uno de los elementos es verdadero. Es decir, evalúa si el valor a la izquierda o el de la derecha son verdaderos o falsos. En R, “or” se expresa mediante el símbolo “|”.

Ejemplo:

# Ejemplo 1
x <- 5
y <- 10

resultado <- (x > 3) | (y < 5)

print(resultado)
[1] TRUE

Operador lógico “and” en R

El operador and, se usa para referirse a la evaluacion de varias condiciones a las que se sujeta, esto implica que esas condiciones deben ser verdaderas para que se pueda cumplir, and tambien puede ser usado como & o &&, aunque la segunda expresion se genera solo si la primera condicion es verdadera, sin evaluar la segunda condicion.

x <- 5
y <- 13

resultado <- (x > 2) & (y < 15)  
resultado
[1] TRUE
x <- 2
y <- 20

resultado <- (x > 1) && (y < 15)  
resultado
[1] FALSE

III. Bucles

a) ¿Qué es un bucle?

Es una estructura de control que facilita la repetición de un conjunto de instrucciones según una condición específica. Esta herramienta es esencial en programación, ya que automatiza tareas que requieren ejecutarse múltiples veces. R proporciona distintos tipos de bucles, como el bucle for, que itera sobre un conjunto de valores, el bucle while, que repite un bloque de código mientras se cumple una condición, y el bucle repeat, que crea una iteración continua hasta que se satisface una condición de salida.

b) Construcción de bucles

Construcción de Bucles en R

Los bucles son una parte fundamental de la programación en R y se utilizan para realizar tareas repetitivas de manera eficiente. En este trabajo, exploraremos los bucles en R y cómo se construyen.

Introducción a los Bucles

En programación, un bucle es una estructura que permite ejecutar un conjunto de instrucciones varias veces. Esto es especialmente útil cuando tenemos que realizar la misma operación en múltiples elementos de un conjunto de datos. R ofrece varios tipos de bucles, pero los más comunes son el bucle for y el bucle while.

Ejemplo de bucle for

El bucle for se utiliza cuando se conoce de antemano cuántas veces se debe repetir una operación. Su estructura básica se ve así:

for (variable in secuencia) {
  # Código a ejecutar en cada iteración
}

c) Tipos de bucles

1. For

La estructura for nos permite ejecutar un bucle (loop), realizando una operación para cada elemento de un conjunto de datos.

Estructura:

for(elemento in objeto) {
  operacion_con_elemento
}

En la parte que corresponde al “elemento” la podemos llamar como nosotros deseemos, pero la parte que corresponde al “objeto” debe ser el nombre de un objeto definido.

Ejemplo:

# Creando un bucle "for" del 1 al 10
for(numero in 1:10 ){
  print(numero)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

2. While

Este es un tipo de bucle que ocurre mientras una condición es verdadera. La operación se realiza hasta que se se llega a cumplir un criterio previamente establecido.

Estructura:

while(condicion) {
  operaciones 
}

Ejemplo:

umbral <- 6
valor <- 0

while(valor < umbral) {
  print("Hola")
  valor <- valor + 1
}
[1] "Hola"
[1] "Hola"
[1] "Hola"
[1] "Hola"
[1] "Hola"
[1] "Hola"

3. Repeat

Este es un bucle que se llevará a cabo el número de veces que especifiquemos, usando un break para detenerse. repeat asegura que las operaciones que contiene sean iteradas al menos en una ocasión.

Estructura:

repeat {   
  operaciones
  
  un_break_para_detener 
}

Ejemplo:

i <-  0

repeat{
  print(i)
  i <- i + 1
  if(i == 8) {
    break
  }
}
[1] 0
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7

d) Declaraciones de control

Dentro de los bucles, las declaraciones de control o estructuras de control, nos permiten realizar construcciones para controlar la manera en la que se realizará el bucle, esto debido a las diversas condiciones que se pueden colocar en un código. Algunas de estas condiciones son:

1. if-else

if (si) es utilizada para condicionar a la ejecución de nuestro bucle a cada iteración dada, esta declaración de control se utiliza junto con el else (de otro modo) que genera otra acción si en caso no se cumple la primera condición en nuestro bucle. Ejemplos:

for (l in 1:20) {
  if (l %% 3 == 0) {
    cat(l, "es un número múltiplo de 3\n")
  } else {
    cat(l, "no es un número múltiplo de 3\n")
  }
}
1 no es un número múltiplo de 3
2 no es un número múltiplo de 3
3 es un número múltiplo de 3
4 no es un número múltiplo de 3
5 no es un número múltiplo de 3
6 es un número múltiplo de 3
7 no es un número múltiplo de 3
8 no es un número múltiplo de 3
9 es un número múltiplo de 3
10 no es un número múltiplo de 3
11 no es un número múltiplo de 3
12 es un número múltiplo de 3
13 no es un número múltiplo de 3
14 no es un número múltiplo de 3
15 es un número múltiplo de 3
16 no es un número múltiplo de 3
17 no es un número múltiplo de 3
18 es un número múltiplo de 3
19 no es un número múltiplo de 3
20 no es un número múltiplo de 3

2. break

Es una palabra reservada en Rstudio. La declaración de control break nos permite interrumpir y finalizar un bucle al tener una condición que sea TRUE. Ejemplo:

i <- 0

while (i <= 14) {
  if (i == 8) {
    cat("Se alcanzó el valor 8. \n")
    break
  }
  cat("Valor de i:", i, "\n")
  i <- i +3
}
Valor de i: 0 
Valor de i: 3 
Valor de i: 6 
Valor de i: 9 
Valor de i: 12 

Nota: break mayormente es usado en un bucle repeat, esto para que el bucle no sea infinito. Ejemplo

numero <- 7

contador <- 1

repeat {
  if (contador == numero) {
    cat("Número encontrado: ", numero, "\n")
    break  
  }
  cat("Probando con", contador, "Número no encontrado \n")
  contador <- contador + 1
}
Probando con 1 Número no encontrado 
Probando con 2 Número no encontrado 
Probando con 3 Número no encontrado 
Probando con 4 Número no encontrado 
Probando con 5 Número no encontrado 
Probando con 6 Número no encontrado 
Número encontrado:  7 

3. next

Al igual que break, next es una palabra reservada, esta declaración de control nos permite saltar a la siguiente iteración al cumplirse nuestra condición. Ejemplo

i <- 1

repeat {
  if (i > 20) {
    break  
  }
 
  if (i %% 2 == 0) {
    i <- i + 1
    next  
  }
 
  cat(i, "\n")
 
  i <- i + 1
}
1 
3 
5 
7 
9 
11 
13 
15 
17 
19 

IV. Conclusiones

  • Una conclusión sobre R Studio es que es una herramienta altamente eficaz y popular para la programación y análisis de datos en el lenguaje de programación R. Ofrece una interfaz de usuario amigable que integra una amplia gama de funciones, desde la edición de código hasta la visualización de resultados, lo que lo convierte en una opción preferida por los científicos de datos, analistas y estadísticos.

  • La programación Orientada a Objetos mediante el lenguaje R es una herramienta con un potencial que puede ser utilizado en distintos campos de la Ciencia, que nos facilita en gran escala diversos procesos que tomaron un tiempo significativo ante el contexto actual que se ve influenciado el mundo un ejemplo claro de cómo optimizar situaciones sería los bucles que son una herramienta esencial en el programa for y while son los más utilizados y cada uno tiene su lugar en diferentes situaciones desde cotidianas hasta empresariales.

  • La manipulación de objetos no es solo una tarea técnica, sino la base misma del poder analítico en este entorno. Es el arte de transformar datos en información significativa, y dominarlo es la clave para desbloquear el potencial completo de R en el análisis de datos.

  • Los operadores lógicos son una herramienta poderosa para resolver problemas y tomar decisiones en la programación. Nos permiten automatizar tareas complejas y controlar el flujo de un programa de manera efectiva. La habilidad para trabajar con operadores lógicos es esencial para cualquier programador, ya que nos permite transformar nuestras ideas en código funcional. Al dominar estos conceptos, estamos un paso más cerca de aprovechar el poder de la programación para resolver una amplia variedad de desafíos.

  • El uso de los bucles puede presentar problemas por los tipos que hay, bucles como el repeat pueden llegar a ser infinitos, si no se utiliza el break para ejecutar el fin del bucle. Aun así, la facilidad del uso del bucle junto a sus declaraciones de control, lo hacen flexible al momento de realizar un código.

  • Existen tres tipos principales de bucles: for, while y repeat. También se pueden utilizar break y next para controlar el flujo en un bucle. Es importante considerar la vectorización y las funciones de alto nivel en lugar de depender en exceso de los bucles. Esto promueve un código más eficiente y legible.