suma <- function(x, 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:
resultado1 <- suma(x = 2, y = 3)
print(resultado1)
## [1] 5
# También podemos omitir los nombres de los argumentos si mantenemos
# la correspondencia con el orden o posición de los argumentos en el
# que damos los valores:
resultado2 <- suma(2, 3)
print(resultado2)
## [1] 5
# Cuando queremos que el resultado de una función contenga texto podemos
# utilizar las función paste().
potencia <- function(x, y) {
result <- x^y
mensaje <- paste(x, "elevado a la potencia de", y, "es", result)
cat(mensaje)
}
# Función "potencia" con los argumentos x=2 e y=3
potencia(2, 3)
## 2 elevado a la potencia de 3 es 8
# También podemos utilizar la función cat(), que tiene mayor versatilidad.
# Por ejemplo:
x <- 2
cat(x)
## 2
cat("María") # María
## María
cat("María tiene", x, "hijos", ".")# María tiene 2 hijos.
## María tiene 2 hijos .
cat("María tiene", x, "hijos", "\b.")# \b quita el último espacio María tiene 2 hijos.
## María tiene 2 hijos .
cat("María tiene\n", x, "hijos", "\b.")# \n divide la expresión en dos líneas María tiene 2 hijos.
## María tiene
## 2 hijos .
absoluto <- function(x) {
if (x < 0) {
-x # Devuelve el opuesto si x es negativo
} else {
x # Devuelve x si es no negativo
}
}
# La función "absoluto" con argumento x=-3
resultado1 <- absoluto(-3)
print(resultado1)
## [1] 3
# La función "absoluto" con argumento x=3
resultado2 <- absoluto(3)
print(resultado2)
## [1] 3
# Función a trozos: si x es menor a 5 toma el valor 0
# y en caso contrario el valor 10.
ftrozos <- function(x) {
if (x < 5) {
0 # Devuelve 0 si x es menor que 5
} else {
10 # Devuelve 10 si x es mayor o igual a 5
}
}
# Función "ftrozos" con argumento x=3
resultado1 <- ftrozos(3)
print(resultado1)
## [1] 0
# Función "ftrozos" con argumento x=5
resultado2 <- ftrozos(5)
print(resultado2)
## [1] 10
# La Tasa de Metabolismo Basal (TMB), es la cantidad mínima de energía que
# necesita tu cuerpo para funcionar. Nunca debemos ingerir menos cantidad de
# calorías de las que marca la tasa metabólica. La TMB se calcula siguiendo
# las siguientes ecuaciones:
# TMB Mujer = 655 + (9,6 * P) + (1,8 * A) – (4,7 * E)
# TMB Hombre = 66 + (13,7 * P) + (5 * A) – (6,8 * E)
# donde necesitamos información del Sexo, A=Altura, P=Peso y E=Edad de cada
# persona, nuestros argumentos.
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)
}
}
# Función "TMB" con los argumentos para un hombre
resultado_hombre <- TMB("hombre", 170, 57, 32)
print(resultado_hombre)
## [1] 1479.3
# Función "TMB" con los argumentos para una mujer
resultado_mujer <- TMB("mujer", 170, 57, 32)
print(resultado_mujer)
## [1] 1357.8
# 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)
}
resultado1 <- hipotenusa(2, 4)
print(resultado1)
## [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)
}
resultado2 <- hipotenusa(2, 4)
print(resultado2)
## $cateto1
## [1] 2
##
## $cateto2
## [1] 4
##
## $hipotenusa
## [1] 4.472136
# --> Con más de un valor para cada cateto. Si queremos que el resultado tenga
# varios tipos de información (numérica o categórica) podemos utilizar una lista:
resultado3 <- hipotenusa(2:4, 4:6)
print(resultado3)
## $cateto1
## [1] 2 3 4
##
## $cateto2
## [1] 4 5 6
##
## $hipotenusa
## [1] 4.472136 5.830952 7.211103
# --> Resultado como data.frame:
# Si queremos que el resultado sea de un mismo tipo
# pero con múltiples variables podemos utilizar el data.frame:
hipotenusa <- function(cateto1, cateto2) {
h <- sqrt(cateto1^2 + cateto2^2)
data.frame(variable = c("cateto", "cateto", "hipotenusa"),
valor = c(cateto1, cateto2, h))
}
resultado4 <- hipotenusa(2, 4)
print(resultado4)
## variable valor
## 1 cateto 2.000000
## 2 cateto 4.000000
## 3 hipotenusa 4.472136
# Otra opción para presentar los resultados:
hipotenusa <- function(cateto1, cateto2) {
h <- sqrt(cateto1^2 + cateto2^2)
data.frame(cateto1 = cateto1, cateto2 = cateto2, hipotenusa = h)
}
resultado5 <- hipotenusa(2:4, 4:6)
print(resultado5)
## cateto1 cateto2 hipotenusa
## 1 2 4 4.472136
## 2 3 5 5.830952
## 3 4 6 7.211103
# Ejemplo de uso de la función return() para manejar mensajes de error:
f <- function(x, y) {
if (is.character(y))
return("y debe ser numérico")
x + y
}
resultado1 <- f(2, "hola")
print(resultado1)
# Si no utilizáramos la función return() obtendríamos un mensaje de error:
g <- function(x, y) {
if (is.character(y))
"y debe ser numérico"
x + y
}
# Función g con argumentos inválidos
# Esto resultará en un mensaje de error: "argumento no-numérico para operador binario"
resultado2 <- g(2, "hola")
source( “ mifuncion.R”) #desde tu directorio > # Para acceder a una función que se encuentra en la web > source(“https://raw.github.com/tonybreyal/Blog-Reference-Functions/master/R/bingSearchXScraper/bingSearchXScraper.R”)