suma<-function(x,y){
x+y}
## suma(x=2,y=3) [1] 5
suma(2,3)
## [1] 5
potencia <- function(x, y) {
x^y
paste(x,"elevado a la potencia de", y, "es", x^y)}
potencia(2,3)
## [1] "2 elevado a la potencia de 3 es 8"
# Por ejemplo:
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 .
cat("María tiene\n", x, "hijos", "\n")
## María tiene
## 2 hijos
#\n divide la expresión en dos líneas María tiene 2 hijos.
absoluto <- function(x) {
abs(x)
}
absoluto(3)
## [1] 3
ftrozos <- function(x){
if (x<5){
cat(0)
}else{
cat(10)
}
}
ftrozos(20)
## 10
Podemos utilizar funciones condicionales (if, while, etc.) dentro de la función.
TMB_Mujer = 655 + (9.6 * P) + (1.8 * A) - (4.7 * E) TMB_Hombre = 66 + (13.7 * P) + (5 * A) - (6.8 * E)
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",45,70,25)
## [1] 1080
TMB(“hombre”,170,57,32) [1] 1479.3 En este caso le decimos a la función que calcule el TMB con una fórmula si el sujeto es mujer y otra si es hombre.
Imagina que queremos calcular el valor de la hipotenusa de un triángulo a partir de los valores de sus catetos. Único valor. Si solo queremos obtener el valor de la hipotenusa:
hipotenusa<-function(cateto1, cateto2){
sqrt(cateto1^2+cateto2^2)
}
hipotenusa(2,4)
## [1] 4.472136
Lista de valores. 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
hipotenusa(2:4,4:6)
## $cateto1
## [1] 2 3 4
##
## $cateto2
## [1] 4 5 6
##
## $hipotenusa
## [1] 4.472136 5.830952 7.211103
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){
is(is.character(y))
return("y debe ser numérico")
x+y
}
f(2,"hola")
## [1] "y debe ser numérico"
f<-function(x,y){
if (is.character(y)) {
"y debe ser numérico"
} else {
x+y
}
}
f(2,"hola")
## [1] "y debe ser numérico"
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.