UNIVERSIDAD CENTRAL DEL ECUADOR

Facultad de Ciencias Económicas

Carrera de Estadística

Autores: Fernanda Chipantaxi, Ayleen Rubio, Marlon Llugsha, Cristhian Diaz

Fecha: 03-07-2022

Colaborador: Ing. Francisco Valverde, PHD en informática

FUNCIONES EN R

EJERCICIO 1 - Función suma

suma<-function(x,y){x + y}    # suma de los elementos "x" e "y” +     x+y + }
La última operación evaluada es el valor que ha de retornar la función
(también llamada salida).Por ejemplo, si evaluamos la función para los valores
x=2 e y=3 obtenemos:
suma(x=2,y=3) 
## [1] 5
También podemos omitir los nombres de los argumentos si mantenemos la
correspondencia con el orden o posición de los argumentos en el que damos los valores:
suma(2,3) 
## [1] 5

EJERCICIO 2 - Función potencia con paste y cat

Cuando queremos que el resultado de una función contenga texto podemos utilizar
las función paste().
función que calcula x elevado a y
potencia<- function(x, y)
{result <- x^y
paste(x,"elevado a la potencia de", y, "es", result)
} 
potencia(2,3)
## [1] "2 elevado a la potencia de 3 es 8"
También podemos utilizar la función cat(), que tiene mayor versatilidad.
Por ejemplo:
x<-2
cat(x)
## 2
cat("María")
## María
cat("María tiene", x, "hijos", ".")
## María tiene 2 hijos .
#\b quita el último espacio María tiene 2 hijos.
cat("María tiene", x, "hijos", "\b.") 
## María tiene 2 hijos .
divide la expresión en dos líneas
María tiene 2 hijos.
cat("María tiene\n", x, "hijos", "\b.") 
## María tiene
##  2 hijos .

EJERCICIO 3 - Función de valor absoluto con condicionales (if)

absoluto <- function(x) {x }    # valor absoluto de x +     if(x<0){ -x } +     x + } > absoluto(-3) [1] 3 > absoluto(3) [1] 3
Aquí le estamos diciendo que si el valor de “x” es negativo nos devuelva su opuesto, en caso contrario ##### que nos devuelva el valor original de “x”.
absoluto<-function(x)
    { if(x<0)
    { -x } else{ x }
    }
    absoluto(-3)
## [1] 3
    absoluto(3)
## [1] 3

EJERCICIO 4 - Función a trozos con condicionales (if)

Función a trozos: si x es menor a 5 toma el valor 0 y en caso contrario el valor 10.
  ftrozos <- function(x) {
    if (x < 5) {
      0 
    }else{
      10
    }
  } 
    
    ftrozos(3)
## [1] 0
    ftrozos(5)
## [1] 10
Podemos utilizar funciones condicionales (if, while, etc.) dentro de la función.

EJERCICIO 5 - Cálculo de la tasa de metabolismo basal

La Tasa de Metabolismo Basal (TMB), es la cantidad mínima de energía que necesita tu
cuerpo para funcionar. Nunca debemos ingerir menos cantidad de calorías de las que
marca la tasa metabólica. La TMB se calcula siguiendo las siguientes ecuaciones
TMB Mujer = 655 + (9,6 * P) + (1,8 * A) – (4,7 * E)
TMB Hombre = 66 + (13,7 * P) + (5 * A) – (6,8 * E)
donde necesitamos información del Sexo, A=Altura, P=Peso y E=Edad de cada persona, nuestros argumentos.
TMB<-function(Sexo,Altura,Peso,Edad){  if(Sexo=="mujer"){ 655 + (9.6 * Peso) + 
    (1.8 * Altura) - (4.7 * Edad) }else{ 66 + (13.7 * Peso) + (5 * Altura) - 
        (6.8 * Edad) }} 
TMB("hombre",170,57,32)
## [1] 1479.3
TMB("mujer",160,50,25)
## [1] 1305.5
En este caso le decimos a la función que calcule el TMB con una fórmula si el sujeto
es mujer y otra si es hombre.

EJERCICIO 6 - Varias formas de obtener resultados.

Imagina que queremos calcular el valor de la hipotenusa de un triángulo a partir de los valores de sus ##### catetos.
Único valor. Si solo queremos obtener el valor de la hipotenusa:
hipotenusa<-function(cateto1, cateto2) {
  sqrt(cateto1^2+cateto2^2)
}   
hipotenusa(2,4)
## [1] 4.472136
Lista de valores. Si queremos que en el resultado se muestren los valores iniciales y finales:
hipotenusa<-function(cateto1,cateto2){
  h<-sqrt(cateto1^2+cateto2^2)
  list(cateto1=cateto1,cateto2=cateto2,hipotenusa=h)
}  
hipotenusa(2,4)
## $cateto1
## [1] 2
## 
## $cateto2
## [1] 4
## 
## $hipotenusa
## [1] 4.472136
Con más de un valor para cada cateto. Si queremos que el resultado tenga varios tipos de información ##### (numérica o
categórica) podemos utilizar una lista.
hipotenusa(2:4,4:6) 
## $cateto1
## [1] 2 3 4
## 
## $cateto2
## [1] 4 5 6
## 
## $hipotenusa
## [1] 4.472136 5.830952 7.211103
Resultado como data.frame. Si queremos que el resultado sea de un mismo tipo pero con múltiples variables ##### podemos
utilizar eldata.frame.
hipotenusa<-function(cateto1,cateto2) {
  h<-sqrt(cateto1^2+cateto2^2)
  data.frame(variable=c("cateto","cateto","hipotenusa"),valor=c(cateto1,cateto2,h))
} 
hipotenusa(2,4)
##     variable    valor
## 1     cateto 2.000000
## 2     cateto 4.000000
## 3 hipotenusa 4.472136
Otra opción para presentar los resultados:
hipotenusa<-function(cateto1,cateto2) {
  h<-sqrt(cateto1^2+cateto2^2)
  data.frame(cateto1=cateto1,cateto2=cateto2,hipotenusa=h)
} 
hipotenusa(2:4,4:6)
##   cateto1 cateto2 hipotenusa
## 1       2       4   4.472136
## 2       3       5   5.830952
## 3       4       6   7.211103

EJERCICIO 7 - Función return

También se puede utilizar la función “return()” para obtener el resultado de un
paso en particular en la ejecución, no necesariamente el último. Es útil por
ejemplo para identificar un error.
f<- function(x,y)
{
  if(is.character(y))
    return("y debe ser numérico")
  x+y
}
f(2,"hola")  ## obtenemos un mensaje de que y debe ser un valor numerico.
## [1] "y debe ser numérico"
f(2,2)  ## se resuelve la suma entre x+y 
## [1] 4
Si no utilizáramos la función return() obtendríamos un mensaje de error:
f<-function(x,y)
{
  if(is.character(y))
    "y debe ser numérico" 
  x+y
}