class: center, middle, inverse, title-slide .title[ # Presentación y análisis descriptivo de datos con uso de software R ] .subtitle[ ## Estructura de programación ] .author[ ### Prof. Roberto Roque
RPub
] .institute[ ### Departamento de Matemática y Estatística, Universidad Catolica San Pablo ] ---
# Explorando funciones en R Una función es un conjunto de instrucciones en forma de un objeto que recibe una entrada (opcional), realiza una tarea específica y (opcionalmente) genera una salida. Ejemplos de funciones son `sum()` y `mean()` que utilizamos para hallar suma y media de datos. También podemos definir nuestras propias funciones para que actúen como una interfaz que procesa una señal de entrada dada y genera una salida. .panelset[ .panel[.panel-name[Sintaxis] ``` nombre_funcion = function(arg_1, arg_2,...){ instrucción resultado return(resultado) } ``` ] .panel[.panel-name[Ejemplo 1] > Crear un función que calcule la suma de dos numeros `\(x\)`, `\(y\)`. ```r suma=function(x,y){ s=x+y return(paste("La suma es",x,"+",y,"=",s)) } suma(2,5) ``` ``` ## [1] "La suma es 2 + 5 = 7" ``` ] ] --- .panelset[ .panel[.panel-name[Ejemplo 2] Defina una función en R de modo que las variables de entrada sean - media de la muestra (xbar) `\(\bar{x}\)` - media de la población (mu) `\(\mu\)` - desviación estándar poblacional (sigma) `\(\sigma\)` - tamaño de muestra (n) y la variable de salida sea `\(Z\)` definida de la siguiente forma `$$Z=\frac{\bar{x}-\mu}{\frac{\sigma}{\sqrt{n}}}$$` Suponga que `$$\bar{x}=1.75,\quad\mu=1.70,\quad \sigma=0.3,\quad n=20.$$` ] --- .panel[.panel-name[Código R] ```r Estadistico_Z<-function(xbar,mu,sigma,n){ Z=(xbar-mu)/(sigma/n^(1/2)) return(round(Z,4)) } ``` Halle el valor del estadistico `\(Z\)`. ```r xbar=1.75; mu=1.7; sigma=0.3; n=20 Estadistico_Z(xbar,mu,sigma,n) ``` ``` ## [1] 0.7454 ``` ] ] --- # Estructuras condicionales Una estructura condicional, o más específicamente, la sentencia `if-else`, se utiliza para combinar el resultado de múltiples operadores lógicos y decidir el flujo de las acciones posteriores. Es comúnmente utilizada para aumentar la complejidad de programas grandes en R. .panelset[ .panel[.panel-name[Sintaxis] ``` if(evaluation condition){ some expression } else { other expression } ``` ] .panel[.panel-name[Ejemplo 1] > Crear una estructura condicional que indique si eres o no mayor de edad. ```r edad=15 if(edad>=18){ print("Eres mayor de edad") } else{ print("Eres menor de edad") } ``` ``` ## [1] "Eres menor de edad" ``` ] .panel[.panel-name[Ejemplo 2] > Crear una estructura condicional que diga si un numero `\(x\)` es positivo, cero o negativo. ```r x=0 if(x > 0){ print("es positivo") } else if(x == 0){ print("es cero") } else { print("es negativo") } ``` ``` ## [1] "es cero" ``` ]] --- # Loops Un bucle (loop) es similar a una sentencia `if`; el código solo se ejecutará si la condición se evalúa como `TRUE`. La única diferencia es que un bucle continuará ejecutando el código de manera iterativa mientras la condición sea `TRUE`. Existen dos tipos de bucles: el bucle for y el bucle while. - El bucle **for** se utiliza cuando sí se conoce el número de iteraciones. - El bucle **while** se utiliza cuando no se conoce el número de iteraciones de antemano, y su finalización depende de la condición evaluada o de una condición separada dentro del cuerpo del bucle usando la instrucción de control `break`. - El bucle **repeat** es una estructura de control que ejecuta un bloque de código de forma indefinida hasta que se encuentra con una instrucción `break`, la cual detiene explícitamente el bucle. --- # For .panelset[ .panel[.panel-name[Sintaxis] ``` for(variable in vector){ some expression } ``` ] .panel[.panel-name[Ejemplo 1] > Halle la suma de los 100 primeros numeros ```r n=100 s=0 for (i in 1:n) { s=s+i } s ``` ``` ## [1] 5050 ``` ] .panel[.panel-name[Ejemplo 2] > Halle la suma de las siguientes notas `$$4,5,2,6,7,8,4,6,8,4,7,8,6,8,9,10$$` ```r notas<-c(4,5,2,6,7,8,4,6,8,4,7,8,6,8,9,10) s=0 for (x in notas) { s=s+x } s ``` ``` ## [1] 102 ``` ] .panel[.panel-name[Ejemplo 3] > Halle un vector que contiene los cuadrados de 10 primeros numeros naturales. ```r n=10 x=1^2 for (i in 2:n) { x=append(x,i^2) } x ``` ``` ## [1] 1 4 9 16 25 36 49 64 81 100 ``` ] ] --- # While .panelset[ .panel[.panel-name[Sintaxis] ``` while(condicion 1){ some expression if(condition 2){ break } } ``` ] .panel[.panel-name[Ejemplo 1] > Halle la suma de los 100 primeros numeros ```r n=100 s=0 i=1 while (i<=n) { s=s+i i=i+1 } s ``` ``` ## [1] 5050 ``` *Observamos que en este caso si se conoce el numero de iteraciones* ] .panel[.panel-name[Ejemplo 2] > Diga el numero de intentos que realizó al lanzar un dado hasta salir el número 6. ```r dado <-0 intentos <-0 while (dado != 6) { dado <- sample(1:6, 1) intentos <- intentos + 1 } cat("Salió el numero seis en el intento",intentos) ``` ``` ## Salió el numero seis en el intento 3 ``` ] .panel[.panel-name[Ejemplo 3] > Diga el numero de intentos que realizo al lanzar un dado hasta salir el número 6. Ademas, en cada intento diga que numero que salió. ```r dado <-0 intentos <-0 while (dado != 6) { dado <- sample(1:6, 1) intentos <- intentos + 1 cat("Intento", intentos, ": salió", dado, "\n") } ``` ``` ## Intento 1 : salió 3 ## Intento 2 : salió 2 ## Intento 3 : salió 4 ## Intento 4 : salió 6 ``` ] ] --- # Repeat .panelset[ .panel[.panel-name[Sintaxis] ``` repeat { Instrucciones if (condición) { break } } ``` ] .panel[.panel-name[Ejemplo] > Diga el numero de intentos que realizo al lanzar un dado hasta salir el número 6. Ademas, en cada intento diga que numero que salió. ```r intentos <- 0 repeat { dado <- sample(1:6, 1) intentos <- intentos + 1 cat("Intento", intentos, "- salió:", dado, "\n") if (dado == 6) { cat("¡Salió un 6 en el intento", intentos, "!\n") break } } ``` ``` ## Intento 1 - salió: 1 ## Intento 2 - salió: 1 ## Intento 3 - salió: 4 ## Intento 4 - salió: 3 ## Intento 5 - salió: 4 ## Intento 6 - salió: 6 ## ¡Salió un 6 en el intento 6 ! ``` ] ]