knitr::opts_chunk$set(echo=TRUE)
ceiling: funcion de redondeo por encima
# N tamaño de población
# p Proporción de personas con respuesta afrimativa (o negativa ) a la pregunta piloto
# e errorde muestreo
# z puntuación en la curva normal
muestra.as=function(N,p,e,z){
if(p<0 & p>1){
if(e>=0 & e<0.1)
{
n = N*p*(1-p)/((N-1)*(e/z)^2+p*(1-p))
n=ceiling(n)
return(n)
}
else{
message("Error de muestreo fuera del límite")
}
}
else
{
message("Valor de proporción no adecuado")
}}
#Probando la función
muestra.as(N=500,p=0.3,e=0.05,z=1.96)
## Valor de proporción no adecuado
#Probando el p fuera de límites
muestra.as(N=500,p=1.1,e=0.05,z=1.96)
## Valor de proporción no adecuado
#Probando el e fuera de límites
muestra.as(N=500,p=0.3,e=0.15,z=1.96)
## Valor de proporción no adecuado
#Probando el p y e fuera de límites
muestra.as(N=500,p=1.1,e=0.15,z=1.96)
## Valor de proporción no adecuado
En la función anterior se valida (con la función if) -el valor de p se encuentre en el intervalo \((0,1)\) -el valor de e se encuentre en el intervalo \((0,0.1)\) Las condiciones “if” se encuentran anidadas por lo cual
reescalado=function(x,...){
med=mean(x, ...)
des=sd(x, ...)
if (!is.na(des)){
xr=(x-med)/des
return(xr)
}else{
message("La desviaión de sus datos es 0, no pueden ser estandarizados")
}
}
mi_x=1
reescalado(mi_x)
## La desviaión de sus datos es 0, no pueden ser estandarizados
En el “if” de la anterior función se usa “is.na()” para saber si es un dato faltante, además se usa e signo de admiración “!” para negar la pegunta "Si la desviación NO es
reescalado=function(x,...){
med=mean(x, ...)
des=sd(x, ...)
if (!is.na(des) & des>0){
xr=(x-med)/des
return(xr)
}else{
message("La desviaión de sus datos es 0, no pueden ser estandarizados")
}
}
(mi_x=rep(10,10))
## [1] 10 10 10 10 10 10 10 10 10 10
reescalado(mi_x)
## La desviaión de sus datos es 0, no pueden ser estandarizados
Se agrega la condición de que “des>0” para el caso de tener todos los alores del vector iguales, este se anida con la función “&”
reescalado=function(x,...){
med=mean(x, ...)
des=sd(x, ...)
if (!is.na(des)){
xr=(x-med)/des
return(xr)
}else{
message("La desviaión de sus datos es 0 o contiene NA, no pueden ser estandarizados")
}
}
(mi_x=c(rnorm(10),NA))
## [1] -0.05839259 0.39069599 0.57506835 0.67615679 1.47931151 0.53411738
## [7] -0.17128746 0.12528739 -1.35197463 0.76780786 NA
reescalado(mi_x,na.rm=TRUE)
## [1] -0.4763879 0.1261394 0.3735057 0.5091328 1.5866989 0.3185632
## [7] -0.6278552 -0.2299505 -2.2119443 0.6320980 NA
El argumento “…” actua como parámetro indetermindado para ser usado como argumento para las funciones internas: el caso “na.rm=TRUE” es argumento de la función “mean()” y “sd()” para realizar el calculo omitiendo los “NA”.
ff=function(a,b)a-a^2
ff(2,stop("ERROR"))
## [1] -2
"+"(2,2)
## [1] 4
El redondeo de la temperatura diaria promedio entera más cercana (en °F) registrado por cierta estación durante un mes cualquiera del 2010 para dos localidades diferentes (L1 y L2) se da en la Tabla 1:
fun_ejm1<-function(x){
media=media(x);
which(x<media);
which(l1<l2);
}
Describa paso a paso porque la función H1 al ser evaluada como H1() rinde el 3, H1(1) rinde el 1 y H1(1,1) rinde el 2.
H1<-function(x={y<-1;2},y=0){
x+y^2
}
H1()
## [1] 3
Describa porqué la función H2 al ser evaluada como H2() rinde el 100.
H2<-function(x=z){
z<-100
x
}
H2()
## [1] 100
La función está evaluada en x, sin embargo el valor de x está guaradado como z y z es igual a 100, por ende al no poner un valor en x, la función naturalmente va a ser evaluada en z.
Apoyado en el ordenador infijo construido, construya otro operador con triple asterisco que muestre en consola las palabras amarillo, azul y rojo, cada una en su color respectivo