Autores:
Colaborador:
suma<-function(x,y){
# 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:
suma(x=2,y=3)
## [1] 5
suma(2,3)
## [1] 5
FUNCION paste()
potencia <- function(x, y) {
# función que calcula x elevado a 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"
FINCON cat ()
x<-2
cat(x)
## 2
cat("María")
## María
cat("María tiene", x, "hijos", ".")
## María tiene 2 hijos .
cat("María tiene", x, "hijos", "\b.")
## María tiene 2 hijos .
#\ b quita el último espacio María tiene 2 hijos.
cat("María tiene\n", x, "hijos", "\b.")
## María tiene
## 2 hijos .
#\n divide la expresión en dos líneas María tiene 2 hijos.
absoluto <- function(x) {
# valor absoluto de x
if(x<0){print(-x)}
else
print(x)
}
absoluto(-3)
## [1] 3
absoluto(3)
## [1] 3
Aquí le estamos diciendo que si el valor de “x” es negativo nos devuelva su opuesto, en caso contrario que nos devuelva el valor original de “x”.
Funcion a trozos: si x es menor a 5 toma el valor 0 y en caso contrario el valor 10.
f_trozos<-function(x) {
if(x<5){
x=0
paste(x)
}else{
x=10
paste(x)
}
}
f_trozos(3)
## [1] "0"
f_trozos(8)
## [1] "10"
La Tasa de Metabolismo Basal (TMB), es la cantidad minima de energia que necesita tu cuerpo para funcionar. Nunca debemos ingerir menos cantidad de calorias de las que marca la tasa metabolica. La TMB se calcula siguiendo las siguientes ecuaciones
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",160,50,25)
## [1] 1305.5
Imagina que queremos calcular el valor de la hipotenusa de un triángulo a partir de los valores de sus catetos.
Si solo queremos obtener el valor de la hipotenusa:
hipotenusa<-function(cateto1, cateto2){
sqrt(cateto1^2+cateto2^2)
}
hipotenusa(2,4)
## [1] 4.472136
Si queremos que en el resultado se muestren los valores iniciales y finales:
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
Si queremos que el resultado tenga varios tipos de información (numérica o categórica) podemos utilizar una lista.
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
Si queremos que el resultado sea de un mismo tipo pero con múltiples variables podemos utilizar eldata.frame.
hipotenusa<-function(cateto1, cateto2){
h<-sqrt(cateto1^2+cateto2^2)
data.frame(variable=c("cateto","cateto","hipotenusa"),valor=c(cateto1,cateto2,h))
}
hipotenusa(2,4)
## variable valor
## 1 cateto 2.000000
## 2 cateto 4.000000
## 3 hipotenusa 4.472136
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
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.
f<-function(x,y){
if(is.character(y)) return("amo programacion")
x+y
}
f(9,"xd")
## [1] "amo programacion"
Si no utilizáramos la función return() obtendríamos un mensaje de error:
f<-function(x,y){
if(is.character(y)) ("amo programacion")
x+y
}
f(9,"xd")
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.