######################Computación estadistica 2018-3######################
##############2da tarea practica: funciones###################
### Autores: Johan Andres Forigua Rodriguez & Julián David Gómez Ballén########
### Estudiantes Universidad Nacional de Colombia sede Bogotá
### Facultad de Ciencias Agrarias, Departamento de Agronomia
####################Punto 1######################
library(lattice) #Activar libreria lattice, necesaria para ejecutar el grafico
#Introducción de los valores de temperatura por localidad
H1=c(62,50,46,44,43,41,43,45,41,36,41,42,48,51,60,68,71,61,56,55,66,72,65,70,69,59,56,54,59,67,61)
H2=c(39,40,37,37,37,40,42,47,43,45,44,45,55,46,41,44,48,49,45,40,38,41,41,39,42,42,47,46,43,43,41)
#Creación de la función clima.loc
clima.loc <- function(L1,L2) {#Se crean los dos argumentos, Localidad 1 y 2
D <- c(1:length(L1)) #Se crea el vector, dias del mes
Fahrenheit<- data.frame(cbind(D,L1,L2)) # Creamos data frame con las variables, dia del mes, temperatura L1 y L2
#Posteriormente se renombran las columnas
names(Fahrenheit)[1] <- "Día"
names(Fahrenheit)[2] <- "L1 (°F)"
names(Fahrenheit)[3] <- "L2 (°F)"
#Calculo de la media por localidad, se guarada en vector mL1 y mL2, tambien se le asigan texto
mL1<-mean(L1)
TmL1 <- paste("Media Localidad 1:",mL1)
mL2<-mean(L2)
TmL2 <- paste("Media Localidad 2:",mL2)
#For, para encontar el numero de días donde la temperatura estuvo por debajo de la media
a <- 0
for (n in L1) {
if(n<mL1) a<- a+1 #a es el numero de dias por localidad por debajo de la media
}
Ta <- paste("numero de días por debajo de la media L1:",a)
b <- 0
for (n in L2) {
if(n<mL2) b<- b+1
}
Tb <- paste("numero de días por debajo de la media L2:",b)
#El siguiente ifelse se utilizo para encontar los días del mes donde la temperatura de L1 fue mayor a la de L2
#así que primero pusimos que si se cumplia la condición nos mostarra el dia del mes y si no un NA
#Luego de esto con la función is.na() eliminamos los Na, y nos resulta un vector con los días donde L1>L2
#Se le agrego texto y se guardo en Td
d<- ifelse(L1>L2,D,NA)
d <- d[is.na(d) == F]
Td <- c("Días del mes donde L1 mayor a L2: ")
##Para este punto donde queremos encontrar la maxmima diferencia lo que se hizo fue optener un vector de la diferencia
#en valor absoluto con la función abs() posteriormente con el condicional se puso que donde este valor coincidiera nos mostrara
# el dia con el vector D, si no un NA, posteriormente se eliminaron los NA y el valor resultante indica que día
#se presento la maxima diferencia que en este ejemplo fue de 31 °F y ocurrio en dos días por lo tanto se muestran los dos.
q <- (abs(L1-L2) )
x=ifelse(q==max(q),D,NA)
x <- x[is.na(x) == F]
Tx= paste("maxima diferencia de temperatura fue de",max(q),"°F el o los días del mes numero:")
dif=abs(L1-L2)
#Para esta parte el objetivo es encontar los días donde la diferencia fue de al menos 3 grados por lo tanto se creo un for
#cuyo condicional me va sumando una unidad cuando la condición se cumple y al final obtendre un vector con el valor
#De numero de días donde la temperatura fue igual o mayor a 3.
e=0
for (n in dif) {
if(n>=3) e=e+1
}
Te=paste("Numero de días donde la diferencia de temperatura es mayor o igual a 3:", e)
#Para convertir los datos de °F a °C se utilizo la ecuación CF=(°F-32)/1.8 y con la función round()se dejo con dos decimales
#luego se creo un data.frame con D=Día del mes, celcius1=L1 en °C y celcius2=L2 en °c igualmente.
celciusL1=round(((L1-32)/1.8),2)
celciusL2=round(((L2-32)/1.8),2)
celcius <- data.frame(cbind(D,celciusL1,celciusL2))
names(celcius)[1] <- "Día"
names(celcius)[2] <- "L1 (°C)"
names(celcius)[3] <- "L2 (°C)"
#Finalmente se crea un grafico con la libreria lattice, creando un nuevo datframe
#conformado por la variable dia del mes, localida, temperatura, luego utilizando la función xyplot() se creo el grafico
#donde Temp ~Dia.mes y con la función group, se agrupo por localidad, creando las dos lineas, con auto,key se inserta y modifica la leyenda
Localidad <-c(rep("L1",length(L1)),rep("L2",length(L2)))
Temp <- c(L1,L2)
Dia.mes <- c((1:length(L1)),(1:length(L2)))
t=data.frame(Dia.mes,Localidad,Temp)
uu<- xyplot(Temp ~Dia.mes,t,grid=T,group=Localidad,auto.key = list(columns=2,lines=T,points=F,"topleft"),type = "l",xlab = "Día del mes",ylab = "°C",lwd=2,main="Clima del mes por localidad")
#se utilizo return y list para que imprimiera en formato lista todos los vectores guardados, ya mencionados.
return(list(Fahrenheit,TmL1,TmL2,Ta,Tb,Td,d,Tx,x,Te,celcius,uu))
}
clima.loc(H1,H2)
## [[1]]
## Día L1 (°F) L2 (°F)
## 1 1 62 39
## 2 2 50 40
## 3 3 46 37
## 4 4 44 37
## 5 5 43 37
## 6 6 41 40
## 7 7 43 42
## 8 8 45 47
## 9 9 41 43
## 10 10 36 45
## 11 11 41 44
## 12 12 42 45
## 13 13 48 55
## 14 14 51 46
## 15 15 60 41
## 16 16 68 44
## 17 17 71 48
## 18 18 61 49
## 19 19 56 45
## 20 20 55 40
## 21 21 66 38
## 22 22 72 41
## 23 23 65 41
## 24 24 70 39
## 25 25 69 42
## 26 26 59 42
## 27 27 56 47
## 28 28 54 46
## 29 29 59 43
## 30 30 67 43
## 31 31 61 41
##
## [[2]]
## [1] "Media Localidad 1: 54.9032258064516"
##
## [[3]]
## [1] "Media Localidad 2: 42.8064516129032"
##
## [[4]]
## [1] "numero de días por debajo de la media L1: 14"
##
## [[5]]
## [1] "numero de días por debajo de la media L2: 16"
##
## [[6]]
## [1] "Días del mes donde L1 mayor a L2: "
##
## [[7]]
## [1] 1 2 3 4 5 6 7 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
## [24] 30 31
##
## [[8]]
## [1] "maxima diferencia de temperatura fue de 31 °F el o los días del mes numero:"
##
## [[9]]
## [1] 22 24
##
## [[10]]
## [1] "Numero de días donde la diferencia de temperatura es mayor o igual a 3: 27"
##
## [[11]]
## Día L1 (°C) L2 (°C)
## 1 1 16.67 3.89
## 2 2 10.00 4.44
## 3 3 7.78 2.78
## 4 4 6.67 2.78
## 5 5 6.11 2.78
## 6 6 5.00 4.44
## 7 7 6.11 5.56
## 8 8 7.22 8.33
## 9 9 5.00 6.11
## 10 10 2.22 7.22
## 11 11 5.00 6.67
## 12 12 5.56 7.22
## 13 13 8.89 12.78
## 14 14 10.56 7.78
## 15 15 15.56 5.00
## 16 16 20.00 6.67
## 17 17 21.67 8.89
## 18 18 16.11 9.44
## 19 19 13.33 7.22
## 20 20 12.78 4.44
## 21 21 18.89 3.33
## 22 22 22.22 5.00
## 23 23 18.33 5.00
## 24 24 21.11 3.89
## 25 25 20.56 5.56
## 26 26 15.00 5.56
## 27 27 13.33 8.33
## 28 28 12.22 7.78
## 29 29 15.00 6.11
## 30 30 19.44 6.11
## 31 31 16.11 5.00
##
## [[12]]

############################################################
############################################################
###########################Ejercicio 2#####################################
H1 <- function(x={2;y <- 1},y=0) x+y^2
H1() #al no definir datos dentro de la función, esta toma los valores por default
## [1] 2
#asi la función define a x como un conjunto de comandos, donde define el valor
#de y en 1 y el segundo comanado define a x con el valor de 2
# por lo tanto arojará como resultado 2+1^2=3
H1(1) #Debido a que en este caso se esta definiendo el valor de x a 1, y no el valor de y;
## [1] 1
#la función iguala a x=1 y y es dejado con su valor default y=0 por lo tanto la funcion
#ejecuta la operación como 1+0^2
H1(1,1)#En esta ocación se estan definiendo las dos variables de la función, X y y son iguales a 1
## [1] 2
#por lo tanto la funcion toma los valores suministrados y no los datos default
# ejecutando la operacion como 1+1^2=2
#########################Ejercicio 3######################################
H2 <- function(x=z){
z <- 100
x
}
H2() #en este caso la funcion posee dos variables, donde x es igual a z, y dentro de los comandos se define a z
## [1] 100
#con el valor de z, asi la funcion al ejecutarse sin nigun valor, toma el valor definido por default asi x=z
#y z es igual 100, por lo tanto la funcion devuelve el valor de z al llamar a x
#########################Ejercicio 4######################################
#Apoyado en el operador infijo construido, construya otro operador con
#triple asterisco que muestre en consola las palabras amarillo, azul y
#rojo, cada una en su color respectivo.
library(crayon) #Primero instalamos la libreria crayon, necesria para imprimir texto con color en la consola
#Función pate=() me une lo que se encuentre dentro, y gracias a la libreria ponemos color de la siguiente forma
#color("texto")
#Finalmente cat() imprime este texto con el color asiganado
`%***%` <- function(){
color=paste0(yellow("Amarillo "),blue("Azul "),red("Rojo"))
cat(color)
}
###NOTA: Al correr este codigo en R se observan de color correspondiente las palabras Amarillo azul y rojo,
#la copilación no permite observar esto
`%***%`()
## Amarillo Azul Rojo
#########################Ejercicio 5. la funcion normal#########################################
#Se establece la función y todos loa comandos necesarios para la ehjecucion de la funcion.
f <- function(desde=0,hasta=0,cada=0 ){
a <- 1/sqrt(2*pi) #defino la primera parte de la ecuacion
x <- seq(desde,hasta,cada) #creo las x necesarias para analizar
ex <- (-x^2)/2 #Se define el exponente de la ecuacion normal
fx <- a*exp(1)^ex #Ecuacion normal
df <- data.frame(x,fx) #Aqui se establece un marco de datos con los datos x y los resultantes de la funcion
xmax <- sqrt(-2*log(max(fx)*sqrt(2*pi))) #Esta funcion permite encontrar el valor X donde la funcion tiene un valor maximo
med <- round(mean(x),2) #Calcula la media de los valores dentro de X
Des <- round(sd(x),3) #Calcla la desvacion estandar de los valores dentro de X
Diag <- {plot(x,fx,type = "l",main = "Distribución normal");segments(0,-1,0,1,col="Red");segments(0,0.03,Des,0.03);#En este comando se almacenan todas la funciones necesarias para la ejecucion
segments(Des,0.03-0.01,Des,0.03+0.01);segments(0,0.03,-Des,0.03); #del diagrama junto con los comandos para la visualizacion de leyenda y datos de importancia.
segments(-Des,0.03-0.01,-Des,0.03+0.01);text(Des/2,0.03+0.015,"s");text(-Des/2,0.03+0.015,"s");
text(med-0.2,0.2,"µ");
Tx <-paste("Media =",med); Ty <- paste("s =",Des);
legend("topright",c(Tx,Ty));legend("topleft", expression("f(x)="*frac(1,sqrt(2*pi))*e^frac(-x^2,2)))
}
return(list("x"=fx,"Tabla de datos"=df,"X Donde la funcion es máxima"=xmax, "Media"= med,"Desviación éstandar"=Des)) #En esta linea se definen las salidas de la funció
}
f(-3.5,3.5,0.1) # se ejecuta la funcion cn los parametros ddos por el profesor

## $x
## [1] 0.0008726827 0.0012322192 0.0017225689 0.0023840882 0.0032668191
## [6] 0.0044318484 0.0059525324 0.0079154516 0.0104209348 0.0135829692
## [11] 0.0175283005 0.0223945303 0.0283270377 0.0354745928 0.0439835960
## [16] 0.0539909665 0.0656158148 0.0789501583 0.0940490774 0.1109208347
## [21] 0.1295175957 0.1497274656 0.1713685920 0.1941860550 0.2178521770
## [26] 0.2419707245 0.2660852499 0.2896915528 0.3122539334 0.3332246029
## [31] 0.3520653268 0.3682701403 0.3813878155 0.3910426940 0.3969525475
## [36] 0.3989422804 0.3969525475 0.3910426940 0.3813878155 0.3682701403
## [41] 0.3520653268 0.3332246029 0.3122539334 0.2896915528 0.2660852499
## [46] 0.2419707245 0.2178521770 0.1941860550 0.1713685920 0.1497274656
## [51] 0.1295175957 0.1109208347 0.0940490774 0.0789501583 0.0656158148
## [56] 0.0539909665 0.0439835960 0.0354745928 0.0283270377 0.0223945303
## [61] 0.0175283005 0.0135829692 0.0104209348 0.0079154516 0.0059525324
## [66] 0.0044318484 0.0032668191 0.0023840882 0.0017225689 0.0012322192
## [71] 0.0008726827
##
## $`Tabla de datos`
## x fx
## 1 -3.5 0.0008726827
## 2 -3.4 0.0012322192
## 3 -3.3 0.0017225689
## 4 -3.2 0.0023840882
## 5 -3.1 0.0032668191
## 6 -3.0 0.0044318484
## 7 -2.9 0.0059525324
## 8 -2.8 0.0079154516
## 9 -2.7 0.0104209348
## 10 -2.6 0.0135829692
## 11 -2.5 0.0175283005
## 12 -2.4 0.0223945303
## 13 -2.3 0.0283270377
## 14 -2.2 0.0354745928
## 15 -2.1 0.0439835960
## 16 -2.0 0.0539909665
## 17 -1.9 0.0656158148
## 18 -1.8 0.0789501583
## 19 -1.7 0.0940490774
## 20 -1.6 0.1109208347
## 21 -1.5 0.1295175957
## 22 -1.4 0.1497274656
## 23 -1.3 0.1713685920
## 24 -1.2 0.1941860550
## 25 -1.1 0.2178521770
## 26 -1.0 0.2419707245
## 27 -0.9 0.2660852499
## 28 -0.8 0.2896915528
## 29 -0.7 0.3122539334
## 30 -0.6 0.3332246029
## 31 -0.5 0.3520653268
## 32 -0.4 0.3682701403
## 33 -0.3 0.3813878155
## 34 -0.2 0.3910426940
## 35 -0.1 0.3969525475
## 36 0.0 0.3989422804
## 37 0.1 0.3969525475
## 38 0.2 0.3910426940
## 39 0.3 0.3813878155
## 40 0.4 0.3682701403
## 41 0.5 0.3520653268
## 42 0.6 0.3332246029
## 43 0.7 0.3122539334
## 44 0.8 0.2896915528
## 45 0.9 0.2660852499
## 46 1.0 0.2419707245
## 47 1.1 0.2178521770
## 48 1.2 0.1941860550
## 49 1.3 0.1713685920
## 50 1.4 0.1497274656
## 51 1.5 0.1295175957
## 52 1.6 0.1109208347
## 53 1.7 0.0940490774
## 54 1.8 0.0789501583
## 55 1.9 0.0656158148
## 56 2.0 0.0539909665
## 57 2.1 0.0439835960
## 58 2.2 0.0354745928
## 59 2.3 0.0283270377
## 60 2.4 0.0223945303
## 61 2.5 0.0175283005
## 62 2.6 0.0135829692
## 63 2.7 0.0104209348
## 64 2.8 0.0079154516
## 65 2.9 0.0059525324
## 66 3.0 0.0044318484
## 67 3.1 0.0032668191
## 68 3.2 0.0023840882
## 69 3.3 0.0017225689
## 70 3.4 0.0012322192
## 71 3.5 0.0008726827
##
## $`X Donde la funcion es máxima`
## [1] 0
##
## $Media
## [1] 0
##
## $`Desviación éstandar`
## [1] 2.064
#########################Ejercicio 6. Integral de una funcion de relacion de cambio#########################################
#####PReimero se tiene que indicar que la formula inicial dn/dt = 1.5n se le realizo el sigueinte procedimiento de despeje
# dn/n =1.5 dt -----> integral(dn/dt,limite inferior 30, limite superior x)=integral(1.5 dt, limite inferior=0, limite superior=30)
# se procede a despejar x -----> lnx-ln30=integral(1.5 dt, limite inferior=0, limite superior=30)
# Finalmente se tiene-----> x=exp(ln30+integral(1.5 dt, limite inferior=0, limite superior=30))
# apartir de esta función se realizo la función nota= dado que la población inicial se establece tambien se integra de una vez en la formula, lo demas es variable
library(crayon) #iniciamos instalando al libreria crayon, necesaria para ponerle color al texto de la consola
n.inicial=30 #Definimos la población inicial de insectos
funtion=function(x)(1.5*x^0) #Guardamos la función de crecimiento poblacional
#En la siguiente función se integra primero esta parte de la formula, posteriormente como resultado de despeje d la incognita se construye la ecuación n=exp(ln(población inicial)*integral de la función de numero de indiciduos)
n.final= function(x){
m=integrate(funtion,0,x)
pob.final=ceiling(exp(m$value+log(n.inicial)))
t=paste(red("Cuando t=",x,":","el numero de insectos es de:"),pob.final)
cat(t)
}
#Inicialmente para esta parte del punto se procede a construir la función
#formula inicial dn/dt = 1.5n se le realizo el sigueinte procedimiento de despeje
# dn/n =1.5 dt -----> integral(dn/dt,limite inferior 30, limite superior x*numero deseado a multiplicar)=integral(1.5 dt, limite inferior=0, limite superior=x)
# despeje------> x=2/3 * integral(dn/dt,limite inferior 30, limite superior x*numero deseado a multiplicar)
#Apartir de este despeje se construyo la función
f.mult=function(x)(1/x)
t.multiplicado= function(x){
int=integrate(f.mult,n.inicial,(x*n.inicial))
tiempo=round(((2/3)*int$value),3)
p=paste("La población aumenta",red(x),"veces respecto a la población inicial cuando t=",red(tiempo))
cat(p)
}
#Ejecución final de las dos funciones
n.final(4)
## Cuando t= 4 : el numero de insectos es de: 12103
t.multiplicado(2)
## La población aumenta 2 veces respecto a la población inicial cuando t= 0.462
#########################Ejercicio 7. Integral de la funcion normal#########################################
library(crayon) #libreria necesaria para dar color a las salidas
Integrando <- function(x)(1/sqrt(2*pi)*exp(2)**(-(x**2)/2)) #Se crea la función de la normal
#Con la función n.probabilidad puedo ingresar los valores de los limites y así encontrar el área bajo la curva que
#corresponde al valor de probabilidad
n.probabilidad <- function(x,y){
#Función integrate me permite encontrar el valor de una integral definida donde el primer argumento es la función
#el segundo limite inferior y el siguiente limite superior
inte <- integrate(Integrando,lower =x ,upper =y)
#Con la función cat() y la libreria crayon puedo imprimir texto con color, en este caso se quiere que imprima
# "la probabilidad es del X %, donde x sera de color rojo multiplicado por 100 y con dos decimales.
cat(paste("La probabilidad es del",red(round(inte$value*100,2),"%")))
}
n.probabilidad(-1.96,1.96)
## La probabilidad es del 70.32 %
n.probabilidad(-1,1)
## La probabilidad es del 59.59 %
#######################Ejercicio 8.Cree una función que calcule el coeficiente de variación de un conjunto de datos###
# Se Define el nombre de la funcion y los comandos necesarios para su ejecucion
cv.n <- function(n,med=0,des=0){ #se establecen las variables necesarias para ejecusion de la funcion y sus valores por default
pH <- sort(rnorm(n,med,des)) # se generan una serie de datos con las variables de la funcion y se organizan de menor a mayor con la funcion sort()
Med.n <- mean(pH) # se calcula la media de todos los datos
Des.n <- sd(pH) #Se calcula la desviacion estandar de los datos
cv <- Des.n/Med.n #Se realiza el caculo de la Coeficinte de variacion de los datos
Med.n_max <- mean(pH[1:n-1]) #Se calcula la media de todos los datos menos el maximo
Des.n_max <- sd(pH[1:n-1]) #Se calcula la desviacion estandar de todos los datos menos el maximo
cv.n_max <- Des.n_max/Med.n_max #Se calcula la Coeficinte de variacion de todos los datos menos el maximo
Med.n_min <- mean(pH[2:n]) #Se calcula la media de todos los datos menos el minimo
Des.n_min <- sd(pH[2:n]) #Se calcula la desviacion de todos los datos menos el minimo
cv.n_min <- Des.n_min/Med.n_min #Se calcula la Coeficinte de variacion de todos los datos menos el minimo
Med.n_minmax <- mean(pH[2:n-1]) #Se calcula la media de todos los datos menos el minimo y el maximo
Des.n_minmax <- sd(pH[2:n-1]) #Se calcula la desviacion de todos los datos menos el minimo y el maximo
cv.n_minmax <- Des.n_minmax/Med.n_minmax #Se calcula la Coeficinte de variacion de todos los datos menos el minimo y el maximo
x <- ceiling(n*2.5/100) #se establce el numero de datos que se eleminaran por la acotacion al 5% y se aproxima al entero superior
Med.n_5 <- mean(pH[1+x:n-x]) #Se calcula la media de todos los datos acotados al 5%
Des.n_5 <- sd(pH[1+x:n-x]) #Se calcula la desviación de todos los datos acotados al 5%
cv.n_5 <- Des.n_5/Med.n_5 #Se calcula la Coeficinte de variacion de todos los datos acotados al 5%
Variaciones <- c("n","n-min","n-max","n-min-max","n-truncado5") # se almacenan los nombres de las columnas en un vector
C.variación <- round(c(cv,cv.n_min,cv.n_max, cv.n_minmax,cv.n_5),4) #Se juntan todas los coeficientes de varianza dentro de un solo vector
Media_simulada <- round(c( Med.n,Med.n_min, Med.n_max, Med.n_minmax, Med.n_5),2) #Se juntan todas la varianzas dentro de un solo vector
Desviación_simulada <- round(c( Des.n, Des.n_min, Med.n_max,Des.n_minmax,Des.n_5),2) #Se juntan todas la desviaciones dentro de un solo vector
tablesalida <-data.frame(cbind(Variaciones,C.variación,Media_simulada,Desviación_simulada)) #Se realiza la Tabla con los datos
return(tablesalida) # se establece la tabla de los datos como la salida de la funcion
}
cv.n(50,5.5,0.5) # se ejecuta la función con los datos suministrados por la función
## Variaciones C.variación Media_simulada Desviación_simulada
## 1 n 0.0929 5.46 0.51
## 2 n-min 0.0872 5.49 0.48
## 3 n-max 0.0894 5.44 5.44
## 4 n-min-max 0.0894 5.44 0.49
## 5 n-truncado5 0.0894 5.44 0.49
############### Ejercicio 9.Temperatura de la atmosfera ###############
#Primero se crea el rango de altitud donde calcularemos la temperatura de la atmosfera.
rango.alti <- c(seq(0,500,100),seq(1000,2000,500),seq(3000,6000,1000),10000,15000)
#Se crea la función t.atmosfera con un argumento correspondiente al valor de altitud (ft).
t.atmosfera <- function(x){
# tem.table es un vector de la temperatura atmosferica dependiendo la altitud utilizando la función
#T=-205.05+(0.00164*altitud), temperatura resultante se expresara en °F y la altitud se debe ingresar en ft
tem.table <- -205.05+(0.00164*rango.alti)
#posteriormente se crea el data.frame de la altitud y su correspondente tempertura atmosferica, se asiganan los nombres con names(data)[#]
tabla <- data.frame(cbind(rango.alti,tem.table))
names(tabla)[1] <- "Altitud (ft)"
names(tabla)[2] <- "Tempertura °F"
#Ahora se crea la función que calculara la temperatura atmosferica dependidndo del valor que ingrese el usuario (x)
temper <- (-205.05+(0.00164*x))
#Con el ifelse establecemos que si el valor agregado se se encuentra entre 0 y 15000 ft arrojara la temperatura atmosferica
#pero si no esta en este rango generara un mensaje = Valor fuera de rango
tt <- ifelse(x<0,"Valor fuera de rango",ifelse(x<=15000,temper,"Valor fuera de rango"))
#Finalmente imprimimos la tabla y el valor de temperatura dependiendo el valor de altitud introducido por el usuario
return(list(tabla,tt))
}
#NOTA: Los valores a ingresar deben estar en ft y la rspuesta sera en °F
t.atmosfera(2000)
## [[1]]
## Altitud (ft) Tempertura °F
## 1 0 -205.050
## 2 100 -204.886
## 3 200 -204.722
## 4 300 -204.558
## 5 400 -204.394
## 6 500 -204.230
## 7 1000 -203.410
## 8 1500 -202.590
## 9 2000 -201.770
## 10 3000 -200.130
## 11 4000 -198.490
## 12 5000 -196.850
## 13 6000 -195.210
## 14 10000 -188.650
## 15 15000 -180.450
##
## [[2]]
## [1] -201.77
###############################Ejercicio 10. HUmedad del suelo############################
#Se establecen las variables necesarias par la función:
#MCSH: Masa de capsula con suelo húmedo
#MCSS: Masa de capsula con suelo seco
#MCV: Masa de capsula vacio
#Dend.a: Densidad aparente del suelo
HVyg <- function(MCSH,MCSS,MCV,Dend.a){
agua <- MCSH-MCSS #Calculo del la masa de agua en suelo
soil.s <- MCSS-MCV #Calculo del la masa de suelo seco
Hg <- round((agua/soil.s)*100,1) #Humedad Gravimetrica
Hv <- round(Hg*Dend.a,1) #Humedad volumetrica
df <- rbind(Hg,Hv)
#Con el condicional se definen la salidas de la funcion dependiendo de si se esta ingresando los datos
#correspondientes a una muestra o a n número de muestras por medio de vectores.
ifelse(length(Hv)==1,return(list("Humedad Volumetrica"=Hv, "Humedad Gravimetrica"=Hg)), #Si el resutaldo de la prueba es verdadero se mostraran las humedades en consola
Diag <- barplot(df, main = "Humedad volumetrica y Humedad gravimetrica", col = c("lightblue","darkblue"), #Si el resultado de la prueba es falso, se mostrara una figura donde se
names.arg = c(1:length(Hv)),beside = T, xlab = "Número de Muestras", # se grafican los valores de humedad de las dstintas muestras.
legend = c("Humedad volumetrica (cm^3/g)","Humedad Gravimetrica (%)"),cex.names = 0.7))
}
#Datos correspondientes a un grupo de muestras.
MCV <- c(13.22,12.27,16.81,13.70,10.70,15.13,17.38,16.17,13.41,
11.18,16.91,16.40,14.99,14.16,11.98,13.30,15.90,13.60,11.30,
13.46,16.06,11.51,15.10)
MCSH <- c(37.52,37.45,60.84,38.50,35.50,43.40,45.18,38.10,37.09,37.71,
46.24,43.99,49.66,39.16,37.51,40.50,40.80,38.60,36.30,27.12,34.43,36.62,40.10)
MCSS <- c(31.74,31.27,49.08,32.10,28.62,34.48,37.17,31.98,31.15,31.22,
37.60,35.67,40.23,27.87,28.04,27.11,31.61,28.25,29.40,22.18,30.09,29.02,29.47)
HVyg(MCSH,MCSS,MCV,1.65) #ejecucion de la fucnion con los datos de las muestras.

## [1] 1.5
#Ejecucion de la funcion con los datos de una sola muestra
HVyg(180.45,147.62,30,1.2)
## $`Humedad Volumetrica`
## [1] 33.5
##
## $`Humedad Gravimetrica`
## [1] 27.9
############################ 11. Resistencia total de resistores conectados en paralelelo######
#El objetivo de rest.3 función para encontar el valor de resistencia total con la ecuación Rt= 1/(1/r1 + 1/r2 + 1/r3)
#rest.3 requiere de 3 argumentos que son los valores de resistencia individual de cada resistor
rest.3 <- function(x,y,z){
R1 <- 1/x
R2 <- 1/y
R3 <- 1/z
Rt <- round((1/(R1+R2+R3)),2)
paste("La resistencia total es de ",Rt,"ohms")
}
#Nota: valores ingresados en ohms
rest.3(100,200,150)
## [1] "La resistencia total es de 46.15 ohms"
#LA función rest.n me generara la resistencia cuando tenemos numero indefinido de transitores, x, se introduce como un vector
rest.n <- function(x){
#Con la función for obtendremos el valor del denominador donde cada ciclo se va sumando siempre y cuando n diferente de 0
#ya que saldria error el resultado 1/n , el vector resultante se guarda en s, que posteriormente dividira a 1 y tendremos el valor de
#resistencia total
s=0
for (n in x)
if(n!= 0) s<-(1/n)+s
hh=round((1/s),2)
paste("La resistencia total es de ",hh,"ohms")
}
#primero creamos un vector con los valores de resistencia, no importa cuantos sean
restunit <- c(500,200,100,200,100)
#Luego se introducen en la función rest.n para obtener el valor de resistencia total
rest.n(restunit)
## [1] "La resistencia total es de 31.25 ohms"
#Grafico de 1 a 30 resitores, suponiendo valores de resistencia de 200 ohms
N.reistores <- seq(1,30,1)
R.total <- 200/N.reistores
rt=cbind(N.reistores,R.total)
plot(rt,type = "l", xlab = "N° de resistores",ylab = "Resistencia total (ohms)",main = "Relación de transistores con \n la resitencia total",col="red")

###########################################################################
###############################12. Ultimo ejercicio##########################################
library(plotly) #Se llama la libreria necesaria para la ejecucion de un grafico en coordenadas polares
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:crayon':
##
## %+%
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:crayon':
##
## style
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Polar.cnv <- function(x,y){ # se definen las variables donde "x" y "y" son las variables que almacenan los valores coorespondientes a las coordenadas en el eje x y y
thetpi <- atan(y/x) # se realiza el calculo del angulo con respecto al eje x
thet <- thetpi*180/pi # Se realiza la conversion de los angulos obtenidos anteriormente de pi radianes a grados
ratio <- sqrt(x**2+y**2) # se ejecuta el calculo de la distancia de punto con respecto al origen del plano
thet[which(x<0&y>0)] <- 180+thet[which((x<0)&(y>0))] #Which es una funcion la cual devuelve los valores correspondientes a las posiciones de un valor con una condicion dada
thet[which(x<0&y<0)] <- 180+thet[which((x<0)&(y<0))] #dentro de un vector especifico, por lo tanto permite definir la posisicion dentro de otro vector y realizar modificaciones en
thet[which(x>0&y<0)] <- 360+thet[which((x>0)&(y<0))] #En este caso se realiza el ajuste de los angulos de los vectores que estan ubicados dentro del los cuadrantes II,III y IV
Diag <-plot_ly( #se almacena el diagrama dento de una variable
type = 'scatterpolar', #Se define el tipo de diagrama, en este caso se llama a un diagarama de dispersición polar,
r = ratio, #Se definen los dos parametros correspondientes a las coordenadas polares el radio y el angulo del punto
theta = thet,
mode='markers' # Se establece el tipo de diagrama, en este caso se define cmo un diagrama polar de puntos
)
return(list(Diag,data.frame(x,y,"Radianes"=thetpi,"Grados"=thet,"Radio"=ratio))) #Se establecen los resultados que devueve la fución
}
A <- c(6,6,-6,-6,3,3,3,-3,-3) #Se ingresan los valores correspondientes a las coordenadas del eje X
B <- c(6,-6,6,-6,-1,0,1,1,-1) #Se ingresan los valores correspondientes a las coordenadas del eje y
Polar.cnv(A,B) #Se ejecutó la funcion con los vectores de las coordenadas;
## [[1]]
##
## [[2]]
## x y Radianes Grados Radio
## 1 6 6 0.7853982 45.00000 8.485281
## 2 6 -6 -0.7853982 315.00000 8.485281
## 3 -6 6 -0.7853982 135.00000 8.485281
## 4 -6 -6 0.7853982 225.00000 8.485281
## 5 3 -1 -0.3217506 341.56505 3.162278
## 6 3 0 0.0000000 0.00000 3.000000
## 7 3 1 0.3217506 18.43495 3.162278
## 8 -3 1 -0.3217506 161.56505 3.162278
## 9 -3 -1 0.3217506 198.43495 3.162278
#Para la visualizacion del diagrama de dispersion polar visitar http://rpubs.com/juldgomezbal/414868