UNIVERSIDAD CENTRAL DEL ECUADOR

                            Facultad de Ciencias Económicas

                        Colaborador Ing. Francisco Valverde PhD
               

EJERCICIOS EN R
REALIZAR LOS 7 EJEMPLOS DESCRITOS EN LA LECTURA SIGUIENTE:

En una función tenemos 3 tipos de elementos:

  1. Argumentos (o valores de entrada).

  2. Cuerpo: operaciones que han de realizarse. Se deben localizar entre corchetes “{}”.

  3. Resultado (o valores de salida): la última expresión que se ejecuta.

mifuncion <- function(argumento1, argumento2, …) { cuerpo resultado }

Las funciones también son objetos y por tanto les daremos un nombre, en este caso se llamará “mifuncion”. Debes evitar utilizar nombres que ya estén en uso en R, por ejemplo “mean”. Los argumentos se separan por una coma dentro de “función()”. Puede ser cualquier tipo y cantidad de argumentos. Los argumentos son los ingredientes que necesitas para que se ejecute la función. Los argumentos pueden tener un valor predeterminado, por ejemplo si escribimos argumento2=10:

mifuncion <- function(argumento1, argumento2=10, …) { cuerpo resultado }

El cuerpo de la función contiene las operaciones que deseamos que se ejecuten sobre cada uno de los argumentos detallados anteriormente. Vienen dados entre corchetes “{}” y se ejecutan cada vez que llamamos la función. El resultado es el valor devuelto por la función que se genera en las operaciones que se han ejecutado en el cuerpo de la función. Puede ser cualquier tipo de datos. La última línea del código será el valor que devolverá la función. Veamos algunos ejemplos:



Ejemplo 1.
Función suma.
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:
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
suma <- function(x,y){
  x+y
}  

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 <- function(x,y){
  x+y
}  

suma(2,3)    
## [1] 5

Ejemplo 2.
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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función paste() nos permite concatenar vectores convirtiéndolos en caracteres. El método paste() toma tres parámetros y devuelve una cadena concatenada.
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:
Funciones:
La función cat() nos permite concatenar e imprimir los objetos. Toma hasta seis parámetros y genera los objetos, concatenando las representaciones.
x<-2    
cat(x)        
## 2
cat("Maria")
## Maria
cat("Maria tiene", x, "hijos", ".")
## Maria tiene 2 hijos .
cat("Maria tiene", x, "hijos", "\b.")
## Maria tiene 2 hijos .
cat("Maria tiene\n", x, "hijos", "\b.") 
## Maria tiene
##  2 hijos .

Ejemplo 3.
Función de valor absoluto con condicionales (if)
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
El comando if (si) es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.
absoluto <- function(x) {     
    if(x<0)
  abs (-x)
  abs (x) 
    } 
absoluto(-3) 
## [1] 3
absoluto(3) 
## [1] 3

Ejemplo 4.
Función a trozos con condicionales (if).
Función a trozos: si x es menor a 5 toma el valor 0 yen caso contrario el valor 10.
Funciones:

El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.

El comando if (si) es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.

El comando else (de otro modo) es usado para indicarle a R qué hacer en caso de la condición de un if no se cumpla.

ftrozos <- function(x) {   
  if (x < 5){0} 
  else 
    (x=10) 
  } 
ftrozos(3) 
## [1] 0
ftrozos(5) 
## [1] 10

Ejemplo 5.
Cálculo de la tasa de metabolismo basal.La Tasa de Metabolismo Basal (TMB), es la cantidad mínima de energía quenecesita 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.
Funciones:

El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.

El comando if (si) es usado cuando deseamos que una operación se ejecute únicamente cuando una condición se cumple.

El comando else (de otro modo) es usado para indicarle a R qué hacer en caso de la condición de un if no se cumpla.

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",150,50,25) 
## [1] 1287.5

Ejemplo 6.
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:
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función return() procesa datos y devuelven los resultados.
La función sqrt() retorna la raíz cuadrada de un número.
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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función return() procesa datos y devuelven los resultados.
La función list() permite la creación de listas, paro lo cual solicita los elementos que deseamos incluir en nuestra lista. Para esta estructura, no afectan las dimensiones o largo de los elementos.
La función sqrt() retorna la raíz cuadrada de un número.
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.
Funciones:

####El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.

La función return() procesa datos y devuelven los resultados.

La función list() permite la creación de listas, paro lo cual solicita los elementos que deseamos incluir en nuestra lista. Para esta estructura, no afectan las dimensiones o largo de los elementos.

La función sqrt() retorna la raíz cuadrada de un número.

hipotenusa<- function(cateto1, cateto2)
{
  h<-sqrt(cateto1^2+cateto2^2)
  list(cateto1=cateto1,cateto2=cateto2,hipotenusa=h)
}
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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función return() procesa datos y devuelven los resultados.
La función sqrt() retorna la raíz cuadrada de un número.
La función data.frame()crea marcos de datos, colecciones de variables estrechamente acopladas que comparten muchas de las propiedades de las matrices y las listas, utilizadas como estructura de datos fundamental por la mayoría del software de modelado de R.
hipotenusa<- function(cateto1, cateto2)
{
  h<-sqrt(cateto1^2+cateto2^2)
  data.frame(variable= c("cateto1","cateto2","hipotenusa"),
             valor= c(cateto1,cateto2,h))
}
hipotenusa(2,4)
##     variable    valor
## 1    cateto1 2.000000
## 2    cateto2 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

Ejemplo 7.
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.
Funciones:
El comando function() permite definir una función dentro de otra función, es decir, se puede utilizar como argumento para otras funciones o se pueden ejecutar desde otras funciones.
La función return() procesa datos y devuelven los resultados.
NOTA:
Recuerda que si no se utiliza return de manera explícita en una función, el valor de la última expresión evaluada se devuelve automáticamente en el resultado de la función.
f<-function(x,y) {
  return("y debe ser numérico")
  x+y 
} 
f(2,"hola")
## [1] "y debe ser numérico"
Si no utilizáramos la función return() obtendríamos un mensaje de error:

f<-function(x,y){ “y debe ser numérico”
x+y
} f(2,“hola”)

Error in x + y : non-numeric argument to binary operator.