R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(Big.Mac)
##     Fecha               Pais               Precio     
##  Length:56          Length:56          Min.   :1.652  
##  Class :character   Class :character   1st Qu.:2.554  
##  Mode  :character   Mode  :character   Median :3.238  
##                                        Mean   :3.436  
##                                        3rd Qu.:4.103  
##                                        Max.   :6.622

Including Plots

You can also embed plots, for example:

plot(Big.Mac$Precio)

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Ejercios Reporte 2: Funciones

1. Cree una función que calcule el área de un triángulo rectángulo

Primer ejemplo

areaT <- function(base,altura){ 
  
  ##Cuerpo de la función
  
  calculo<- (base*altura)/2
  calculop <- paste0("El área del triángulo es de ", calculo)
  

  return(calculop)}
  
  ###Resultado

Area1 <-areaT(20,10)

Area1
## [1] "El área del triángulo es de 100"

Segundo ejemplo

areaT <- function(base,altura){ 
  
  ##Cuerpo de la función
  
  calculo<- (base*altura)/2
  calculop <- paste0("El área del triángulo es de ", calculo)
  

  return(calculop)}
  
  ###Resultado

Area2 <-areaT(35,15)

Area2
## [1] "El área del triángulo es de 262.5"

Tercer ejemplo

areaT <- function(base,altura){ 
  
  ##Cuerpo de la función
  
  calculo<- (base*altura)/2
  calculop <- paste0("El área del triángulo es de ", calculo)
  

  return(calculop)}
  
  ###Resultado

Area3 <-areaT(10,5)

Area3
## [1] "El área del triángulo es de 25"

2. Cree una función que permita convertir de grados centígrados a Fahrenheit.

Primer ejemplo

Conversion_fahrenheit <- function(celsius){ 
  
  ## Cuerpo de la función
  
  calculo<-9.0/5.0 * celsius + 32
  calculop <- paste0("La conversión es de ", calculo, " grados fahrenheit")
  

  return(calculop)
}

  ###Resultado de la función con 25 grados celsius

fahrenheit1 <-Conversion_fahrenheit(25)

fahrenheit1
## [1] "La conversión es de 77 grados fahrenheit"

Segundo ejemplo

Conversion_fahrenheit <- function(celsius){ 
  
  ## Cuerpo de la función
  
  calculo<-9.0/5.0 * celsius + 32
  calculop <- paste0("La conversión es de ", calculo, " grados fahrenheit")
  

  return(calculop)
}

  ###Resultado de la función con 18 grados celsius

fahrenheit2 <-Conversion_fahrenheit(18)

fahrenheit2
## [1] "La conversión es de 64.4 grados fahrenheit"

Tercer ejemplo

Conversion_fahrenheit <- function(celsius){ 
  
  ## Cuerpo de la función
  
  calculo<-9.0/5.0 * celsius + 32
  calculop <- paste0("La conversión es de ", calculo, " grados fahrenheit")
  

  return(calculop)
}

  ###Resultado de la función con 33 grados celsius

fahrenheit3 <-Conversion_fahrenheit(33)

fahrenheit3
## [1] "La conversión es de 91.4 grados fahrenheit"

3. Cree una función que permita al usuario:

Convertir de gramos a libras, de metros a millas y de grados centigrados a Fahrenheit.

Introducir el valor a convertir.

Devuelva el valor en función de lo escogido por el usuario.

Primer ejemplo

Conversion_varios <- function(seleccion,cantidad){ 
  
   if(seleccion=="celsius"){
  
  #  fahrenheit
  
  fahrenheit_calculo<-9.0/5.0 * cantidad +32
  calculo_fahrenheit <- paste0("La conversión es de ",  fahrenheit_calculo, " grados Fahrenheit")
  return( calculo_fahrenheit)}
  
   else if(seleccion=="millas"){
  
  #  metros a millas
  
  millas_calculo<-cantidad/1609.34
  calculo_millas <- paste0("La conversión es de ",  millas_calculo, "millas")
  return(calculo_millas)}
  
   else if(seleccion=="libras"){
  
  #  gramos a libras
  
  libras_calculo<-(cantidad/453.592)
  calculo_libras <- paste0("La conversión es de ", libras_calculo, "libras")
  return(calculo_libras)}
  
  else{print("Error")}
}

Resultado1<-Conversion_varios("celsius",50)
Resultado1
## [1] "La conversión es de 122 grados Fahrenheit"

Segundo ejemplo

Conversion_varios <- function(seleccion,cantidad){ 
  
   if(seleccion=="celsius"){
  
  #  fahrenheit
  
  fahrenheit_calculo<-9.0/5.0 * cantidad +32
  calculo_fahrenheit <- paste0("La conversión es de ",  fahrenheit_calculo, " grados Fahrenheit")
  return( calculo_fahrenheit)}
  
   else if(seleccion=="millas"){
  
  #  metros a millas
  
  millas_calculo<-cantidad/1609.34
  calculo_millas <- paste0("La conversión es de ",  millas_calculo, " millas")
  return(calculo_millas)}
  
   else if(seleccion=="libras"){
  
  #  gramos a libras
  
  libras_calculo<-(cantidad/453.592)
  calculo_libras <- paste0("La conversión es de ", libras_calculo, "libras")
  return(calculo_libras)}
  
  else{print("Error")}
}

Resultado2<-Conversion_varios("millas",2500)
Resultado2
## [1] "La conversión es de 1.55343184162452 millas"

Tercer ejemplo

Conversion_varios <- function(seleccion,cantidad){ 
  
   if(seleccion=="celsius"){
  
  #  fahrenheit
  
  fahrenheit_calculo<-9.0/5.0 * cantidad +32
  calculo_fahrenheit <- paste0("La conversión es de ",  fahrenheit_calculo, " grados Fahrenheit")
  return( calculo_fahrenheit)}
  
   else if(seleccion=="millas"){
  
  #  metros a millas
  
  millas_calculo<-cantidad/1609.34
  calculo_millas <- paste0("La conversión es de ",  millas_calculo, "millas")
  return(calculo_millas)}
  
   else if(seleccion=="libras"){
  
  #  gramos a libras
  
  libras_calculo<-(cantidad/453.592)
  calculo_libras <- paste0("La conversión es de ", libras_calculo, " libras")
  return(calculo_libras)}
  
  else{print("Error")}
}

Resultado3<-Conversion_varios("libras",85000)
Resultado3
## [1] "La conversión es de 187.393075715621 libras"

4. Cree una función que tenga como argumento un vector de paquetes y que verifique si los paquetes se encuentren instalados. Si no se encuentran instalados, la función debe de encargarse de instalarlos y posteriormente debe cargar todos los paquetes del vector.

##Instalar y cargar de manera automatica

##Primero se crea un objeto con los paquetes que se desean instalar/cargar

paquetes<- c("readr","dplyr")

##Aplica un ciclo iterativo para comprobar el estado de cada paquete e instalar si corresponde

 for (i in paquetes){
   if (i %in% installed.packages()[,"Package"] == FALSE){
     install.packages(i,repos="http://cran.rstudio.com/");
   }
 }

##Carga los paquetes sin generar mensajes o warnings

sapply(paquetes,library,character.only=TRUE,quietly=T)
##       readr       dplyr      
##  [1,] "readr"     "readr"    
##  [2,] "dplyr"     "dplyr"    
##  [3,] "stats"     "stats"    
##  [4,] "graphics"  "graphics" 
##  [5,] "grDevices" "grDevices"
##  [6,] "utils"     "utils"    
##  [7,] "datasets"  "datasets" 
##  [8,] "methods"   "methods"  
##  [9,] "base"      "base"

5.Descargue la información del índice de Big Mac del siguiente link:.

library(dplyr)

wd <- "/cloud/project"

BigMac <- read.csv("big-mac-full-index.csv",header=T, sep=",", dec = ".", stringsAsFactors = F) %>%
arrange(name,desc(date)) %>%
top_n(1,wt = date)

Big.Mac = data.frame(Fecha=BigMac$date, Pais=BigMac$name, Precio=BigMac$dollar_price, stringsAsFactors = F)

Ejemplo 1:

A continuación diseñe una función que reciba como argumentos: -El objeto del dataset creado desde el punto anterior. -Un vector con el nombre de dos países a comparar

library(dplyr)

Par.Mac <- function(df,Vector){ #Creación de la función.
  
  #Cuerpo de la función.
  
Pais1 <- Vector[1]
Pais2 <- Vector[2]
  
  Pais1 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais1) %>%
    as.character()

  Pais2 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais2) %>% 
    as.character()
  
  Precio1 <- df %>% 
    filter(Pais==Pais1) %>% 
    select(Precio) %>% 
    as.numeric()
  
  Precio2 <- df %>% 
    filter(Pais==Pais2) %>% 
    select(Precio) %>% 
    as.numeric()
  
#Brinde como resultado un mensaje de texto que indique la comparación del valor del índice de Big Mac para los dos países.
  
  Texto <- paste0("El índice de Big Mac para ", Pais1, " es de ", ... = round(Precio1,2) , " dólares y para ", Pais2, " es de ", round(Precio2,2) ," dólares.")

  return(Texto)
}

Spread1 = c("United States", "China")

Par.Mac(Big.Mac,Spread1)
## [1] "El índice de Big Mac para United States es de 5.58 dólares y para China es de 3.05 dólares."

Ejemplo 2:

Par.Mac <- function(df,Vector){ #Creación de la función.
  
  #Cuerpo de la función.
  
Pais1 <- Vector[1]
Pais2 <- Vector[2]
  
  Pais1 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais1) %>%
    as.character()

  Pais2 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais2) %>% 
    as.character()
  
  Precio1 <- df %>% 
    filter(Pais==Pais1) %>% 
    select(Precio) %>% 
    as.numeric()
  
  Precio2 <- df %>% 
    filter(Pais==Pais2) %>% 
    select(Precio) %>% 
    as.numeric()
  
#Brinde como resultado un mensaje de texto que indique la comparación del valor del índice de Big Mac para los dos países.
  
  Texto <- paste0("El índice de Big Mac para ", Pais1, " es de ", ... = round(Precio1,2) , " dólares y para ", Pais2, " es de ", round(Precio2,2) ," dólares.")

  return(Texto)
}

Spread2 = c("Japan", "Mexico")

Par.Mac(Big.Mac,Spread2)
## [1] "El índice de Big Mac para Japan es de 3.6 dólares y para Mexico es de 2.54 dólares."

Ejemplo 3

Par.Mac <- function(df,Vector){ #Creación de la función.
  
  #Cuerpo de la función.
  
Pais1 <- Vector[1]
Pais2 <- Vector[2]
  
  Pais1 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais1) %>%
    as.character()

  Pais2 <- df %>% 
    select(Pais) %>%
    filter(Pais==Pais2) %>% 
    as.character()
  
  Precio1 <- df %>% 
    filter(Pais==Pais1) %>% 
    select(Precio) %>% 
    as.numeric()
  
  Precio2 <- df %>% 
    filter(Pais==Pais2) %>% 
    select(Precio) %>% 
    as.numeric()
  
#Brinde como resultado un mensaje de texto que indique la comparación del valor del índice de Big Mac para los dos países.
  
  Texto <- paste0("El índice de Big Mac para ", Pais1, " es de ", ... = round(Precio1,2) , " dólares y para ", Pais2, " es de ", round(Precio2,2) ," dólares.")

  return(Texto)
}

Spread3 = c("Britain", "Brazil")

Par.Mac(Big.Mac,Spread3)
## [1] "El índice de Big Mac para Britain es de 4.07 dólares y para Brazil es de 4.55 dólares."

6.Indique linea por línea y de manera general cuál es la funcionalidad y propósito de la misma.


split_data <- function(df, train = TRUE,percentage)

#Crea una funcion que elige un porcentaje de un dataframe cuando train es verdadero.
    
{length<- nrow(df)

#Se crea como objeto length igual al total de filas que contiene el  dataframe.

total_row <- length *percentage

#Se saca una muestra del total de filas utilizando el porcentaje y creando un objeto con el nombre de total_row. 

split <- 1:total_row

#Selecciona de la fila 1 hasta el número defido como muestra.

if (train =TRUE)

#Se evalua mediante la condición if else. Si la condicion es verdadera entonces:
  {
train_df <- dataframe[split, ] 

#Se crea un nuevo dataset con aplicando la muestra creada y se nombra train_df.

return(train_df) 

#Devuelve el dataframe final } 

else {
test_df <- df[-split, ] 

#Si la condicion es falsa se crea un dataset eliminando la muestra seleccionada y lo nombra test_df.

return(test_df) #Devuelve el dataframe final
}
}
## Error: <text>:18:11: unexpected '='
## 17: 
## 18: if (train =
##               ^

Corrija el(los) error(es) que contiene la función.

split_data <- function(df, train = TRUE,percentage){  
length<- nrow(df)     
total_row <- length *percentage    
split <- 1:total_row               
if (train == TRUE){                
train_df <- df[split, ]            
return(train_df)                   
} else {
test_df <- df[-split, ]            
return(test_df)
}
}

Compile la función corregida y pruebe con un dataset de su escogencia.

split_data <- function(df, train = TRUE,percentage){  
length<- nrow(df)     
total_row <- length *percentage    
split <- 1:total_row               
if (train == TRUE){                
train_df <- df[split, ]            
return(train_df)                   
} else {
test_df <- df[-split, ]            
return(test_df)
}
}

Samply1 <- split_data(BigMac,train = TRUE,0.25)

Samply2 <- split_data(BigMac,train = TRUE,0.4)

Samply3 <- split_data(BigMac,train = TRUE,0.55)