1- Cree una función que calcule el área de un triángulo rectángulo.
La fórmula para calcular el área de un triángulo rectángulo es Área = b x h/2
# Definición de la función del cálculo del tríangulo
calculo.triangulo <- function(Base,Altura){
area<- (Base)*(Altura)/2
Resultado.area<- paste0("El área de tríangulo es ",area,"cm")
return(Resultado.area)
}
# Determinación de escenarios
calculo.triangulo(6,7)
## [1] "El área de tríangulo es 21cm"
calculo.triangulo(9,18)
## [1] "El área de tríangulo es 81cm"
calculo.triangulo(8,9)
## [1] "El área de tríangulo es 36cm"
2- Cree una función que permita convertir de grados centígrados a Fahrenheit.
Para convertir la temperatura de grados Celsius a Fahrenheit se aplica la fórmula:
# Definición de la función del cálculo de conversión de grados ºC a ºF
calculo.Fahrenheit <- function(temp) {
convertidor <- ((temp) * (9/5)) + 32
Result.temperatura<-paste0(temp," grados ºC son ",convertidor," grados ºF ")
return(Result.temperatura)
}
# Determinación de escenarios
calculo.Fahrenheit(32)
## [1] "32 grados ºC son 89.6 grados ºF "
calculo.Fahrenheit(45)
## [1] "45 grados ºC son 113 grados ºF "
calculo.Fahrenheit(189.9)
## [1] "189.9 grados ºC son 373.82 grados ºF "
3-Cree una función que permita al usuario: 3.1 Convertir de gramos a libras, de metros a millas y de grados centigrados a Fahrenheit. 3.2 Introducir el valor a convertir. 3.3 Devuelva el valor en función de lo escogido por el usuario.
conv.multiple<-function(conversion=c("gramos.libras","metros.millas","centi.Farenheit"),Cantidad) {
if(conversion=="gramos.libras"){
gr.libras<-(Cantidad/453.592)
result.01<-paste0(Cantidad, " gramos son ",round(gr.libras,2)," libras.")
return(result.01)}
else if(conversion=="metros.millas"){
mts.millas<-Cantidad/1609.34
result.02<-paste0(Cantidad, " metros son ",round(mts.millas,2)," millas.")
return(result.02)}
else if(conversion=="centi.Farenheit"){
cel.faren<-((9/5)*Cantidad)+32
result.03<-paste0(Cantidad," grados centigrados son ",round(cel.faren,2)," grados Fahrenheit.")
return(result.03)
}
else{print("Error! Digite nuevamente el parámetro correcto ")}
}
# Determinación de escenarios
conv.multiple("gramos.libras",120)
## [1] "120 gramos son 0.26 libras."
conv.multiple("metros.millas",159)
## [1] "159 metros son 0.1 millas."
conv.multiple("centi.Farenheit",189.0)
## [1] "189 grados centigrados son 372.2 grados Fahrenheit."
conv.multiple("pulgada.cm",89)
## [1] "Error! Digite nuevamente el parámetro correcto "
4- Investigue sobre el índice BigMac y genere lo siguiente:
• Descargue la información del índice de Big Mac del link respectivo.
• A continuación diseñe una función que reciba como argumentos el objeto del dataset creado desde el punto anterior.
• El segundo argumento debe ser un vector con el nombre de dos países a comparar, deseados por el usuario.
• Brinde como resultado un mensaje de texto que indique la comparación del valor del índice de Big Mac para los dos países.Por ejemplo: “El índice de Big Mac para Costa Rica es de 5$ dólares y para Nicaragua es de 2$ dolares.”
##install.packages("dplyr") y tidyverse
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
bigmac<-read.csv("big-mac-full-index.csv",sep=",") %>%
arrange(name,desc(date)) %>%
top_n(1,wt = date)
IndiceBigMac <- function(nPais1, nPais2){
#Filtrar el valor de nPais1
nombrePais1 <- bigmac %>% select(name) %>%
filter(name==nPais1) %>%
as.character()
#Se utiliza as.character para convertir un objeto a uno de tipo character
#para poderlo poner en el mensaje de texto.
#Filtrar el valor de nPais2
nombrePais2 <- bigmac %>% select(name) %>%
filter(name==nPais2) %>%
as.character()
#Obtener el valor nuúmerico de nombrePais1
BigMac1 <- bigmac%>% filter(name==nPais1) %>% select(dollar_price) %>% as.numeric()
#Obtener el valor nuúmerico de nombrePais2
BigMac2 <- bigmac %>% filter(name==nPais2) %>% select(dollar_price) %>% as.numeric()
resultadoBigMac<-paste0("El índice de Big Mac para ", nPais1 , " es de ", round(BigMac1,2), "$ dólares y para ", nPais2 , " es de ",round(BigMac2,2) ,"$ dólares.")
return(resultadoBigMac )
}
# Determinación de escenarios
CálculoNIyMEX <- IndiceBigMac (nPais1="Nicaragua",nPais2="Mexico")
CálculoAUSyISR <- IndiceBigMac (nPais1="Australia",nPais2="Israel")
CálculoARGyBR <- IndiceBigMac (nPais1="Argentina",nPais2="Brazil")
#Print
CálculoAUSyISR
## [1] "El índice de Big Mac para Australia es de 4.35$ dólares y para Israel es de 4.58$ dólares."
CálculoARGyBR
## [1] "El índice de Big Mac para Argentina es de 2$ dólares y para Brazil es de 4.55$ dólares."
CálculoNIyMEX
## [1] "El índice de Big Mac para Nicaragua es de 3.18$ dólares y para Mexico es de 2.54$ dólares."
5- Para la siguiente función:
• Indique linea por línea y de manera general cuál es la funcionalidad y propósito de la misma.
• Corrija el(los) error(es) que contiene la función.
• Compile la función corregida y pruebe con un dataset de su escogencia
# Datframe de prueba
df <- data.frame(Alajuela = round(runif(10,0,20000)),
Saprissa = round(runif(10,0,20000)),
Cartago = round(runif(10,0,5000)),
Heredia = round(runif(10,0,10000)),
PerezZeledon = round(runif(10,0,8000)),
SanCarlos = round(runif(10,0,6000)),
Grecia = round(runif(10,0,5000)),
UCR = round(runif(10,0,500)),
Carmelita= round(runif(10,0,500)),
Guadalupe = round(runif(10,0,1500)),
Limon = round(runif(10,0,4500))
)
df
## Alajuela Saprissa Cartago Heredia PerezZeledon SanCarlos Grecia UCR
## 1 18083 1122 2236 1122 7062 3113 2184 354
## 2 5481 12295 3145 9546 6282 46 1187 45
## 3 11944 6990 1735 9836 7288 31 740 260
## 4 13073 6203 3191 4738 556 4167 2050 34
## 5 4445 14258 3057 3682 6222 3900 128 245
## 6 17921 10594 2790 8319 5743 4270 3504 383
## 7 14407 15801 2126 9339 4276 1611 1626 165
## 8 11142 4933 4819 7636 6902 704 4789 440
## 9 54 13846 2201 9828 3045 3103 2754 112
## 10 17447 5526 1393 6780 3707 673 1742 313
## Carmelita Guadalupe Limon
## 1 214 1289 2254
## 2 169 1335 1871
## 3 492 1039 2770
## 4 322 599 1944
## 5 481 217 3093
## 6 340 1330 3332
## 7 192 330 4428
## 8 296 899 1563
## 9 316 1130 1392
## 10 249 316 526
str(df)
## 'data.frame': 10 obs. of 11 variables:
## $ Alajuela : num 18083 5481 11944 13073 4445 ...
## $ Saprissa : num 1122 12295 6990 6203 14258 ...
## $ Cartago : num 2236 3145 1735 3191 3057 ...
## $ Heredia : num 1122 9546 9836 4738 3682 ...
## $ PerezZeledon: num 7062 6282 7288 556 6222 ...
## $ SanCarlos : num 3113 46 31 4167 3900 ...
## $ Grecia : num 2184 1187 740 2050 128 ...
## $ UCR : num 354 45 260 34 245 383 165 440 112 313
## $ Carmelita : num 214 169 492 322 481 340 192 296 316 249
## $ Guadalupe : num 1289 1335 1039 599 217 ...
## $ Limon : num 2254 1871 2770 1944 3093 ...
# Line 1
split_data <- function(df, train = TRUE,percentage){
# Line 2
length<- nrow(df)
total_row <- length *percentage
# Line 3
split <- 1:total_row
# Line 4
if (train == TRUE){
train_df <- df[split, ]
return(train_df)
} else {
test_df <- df[-split, ] ## Si es false le genera un objeto con el 20% de los datos del df original.
return(test_df)
}
}
Train <- split_data(df, 0.8, train = TRUE)
Test <- split_data(df, 0.8, train = FALSE)
Train
## Alajuela Saprissa Cartago Heredia PerezZeledon SanCarlos Grecia UCR
## 1 18083 1122 2236 1122 7062 3113 2184 354
## 2 5481 12295 3145 9546 6282 46 1187 45
## 3 11944 6990 1735 9836 7288 31 740 260
## 4 13073 6203 3191 4738 556 4167 2050 34
## 5 4445 14258 3057 3682 6222 3900 128 245
## 6 17921 10594 2790 8319 5743 4270 3504 383
## 7 14407 15801 2126 9339 4276 1611 1626 165
## 8 11142 4933 4819 7636 6902 704 4789 440
## Carmelita Guadalupe Limon
## 1 214 1289 2254
## 2 169 1335 1871
## 3 492 1039 2770
## 4 322 599 1944
## 5 481 217 3093
## 6 340 1330 3332
## 7 192 330 4428
## 8 296 899 1563
Test
## Alajuela Saprissa Cartago Heredia PerezZeledon SanCarlos Grecia UCR
## 9 54 13846 2201 9828 3045 3103 2754 112
## 10 17447 5526 1393 6780 3707 673 1742 313
## Carmelita Guadalupe Limon
## 9 316 1130 1392
## 10 249 316 526
Explicación de cada una de las lineas
Line 1
split_data <- function(df, train = TRUE,percentage)
Se crea un objeto donde se guarda la funcion (split_data); df: Define el dataset; train: especifica si la funcion devuelve el train set o el test set; percentage se usa para guardar el porcentage del dataset que queremos dividir para train/test.
Line 2
length <- nrow(df)
Imprime la cantidad de filas que contiene el data frame
total_row <- lengthpercentage
Imprime el total de filas que va a contener el data frame que va a trabajar el train. Normalmente se divide el 80% de las lineas para train, y 20% para test.
Line 3
split <- 1:total_row
Divide el data frame, seleccionando desde la linea 1 hasta la linea total_row
Line 4
if (train =TRUE) Si train es true le genera un objeto con el 80% de los datos del df original
train_df <- dataframe df[split, ]
Aquí se corrige el nombre de la funcion dataframe por “df” como estaba originalmente al principio, y la guarda en un objeto
return(train_df)
Devuelve el resultado de la funcion
else test_df <- df[-split, ]
Guarda el resto de los datos en un objeto para ser usados por el test set, Si es false le genera un objeto con el 20% de los datos del df original.
return(test_df)
Devuelve y ejecuta el resultado para la funcion test