nombre_de_la_función <- function(Argumento1, Argumento2,...) {
... código del programa....
return(resultado)
}
Los argumentos son los valores que se pasan a la función, son variables.
Ejemplo:
inverso <- function(x) {
x <- 1 / x
return(x)
}
inverso(8)
## [1] 0.125
inverso(1:4)
## [1] 1.0000000 0.5000000 0.3333333 0.2500000
El argumento ‘…’ (sin las comillas) permite pasar un número variable de argumentos a una función.
Ejemplo:
inverso <- function(...) {
v <- unlist(list(...)) # Asigna los argumentos a un vector
x <- 1/v
return(x)
}
inverso(8) # Se comporta como la función anterior
## [1] 0.125
inverso(7,5,10) # Pero podemos poner un número variable de argumentos
## [1] 0.1428571 0.2000000 0.1000000
inverso(47,11,587,12,-87)
## [1] 0.021276596 0.090909091 0.001703578 0.083333333 -0.011494253
Esta función permite concatenar (unir) objetos: variables, texto, números, etc.
Ejemplo:
x <- c(1,2,3)
t <- c("uno","dos","tres")
x; t
## [1] 1 2 3
## [1] "uno" "dos" "tres"
Permite asignar nombres a los elementos de una variable
Ejemplo:
x <- c(2,4,6) # Asigna 3 valores a la variable x
names(x) <- c("I","II","III") # Asigna nombres a los 3 valores anteriores
x
## I II III
## 2 4 6
Calcula la raíz cuadrada de un número
Ejemplo:
sqrt(9)
## [1] 3
sqrt(2)
## [1] 1.414214
sqrt(-1)
## Warning in sqrt(-1): Se han producido NaNs
## [1] NaN
Esta función escribe texto y variables en la salida.
La secuencia de escape “\n” produce una nueva línea e impide que la siguiente salida del programa quede en la misma línea.
Ejemplo:
x <- 2
y <- 4
cat(x,"elevado a",y,"es",x ^ y,"\n")
## 2 elevado a 4 es 16
Oculta x en la función return de forma que no se ve el resultado. x todavía se podrá asignar aunque no aparezca
Ejemplo:
suma <- function(a, b) {
s <- a + b
return(invisible(s))
}
suma(5,4)
No se obtiene ningún resultado visible, pero podemos comprobar que existe asignando la función a una variable y mostrando su resultado.
x <- suma(5,4)
x
## [1] 9
Muestra el número de elementos de un vector
x <- 1:20 # Se guarda en x los números del 1 al 20
length(x) # Número de elementos de x
## [1] 20
Elimina los decimales de un número
trunc(1.999999)
## [1] 1
x <- 56.13
trunc(x)
## [1] 56
Redondea un número con los decimales indicados, si no se indican decimales se redondea sin decimales. Cuando el decimal que sigue al último que se mostrará es 5 o mayor de 5 entonces se aproxima el último decimal.
round(6.78) # Al no indicar decimales el resultado es un número entero aproximado
## [1] 7
round(6.78,1) # Se redondea con un decimal
## [1] 6.8
round(10.627,1) # Como el segundo decimar es menor de 5 no se aproxima
## [1] 10.6
Genera n números al azar entre inicio y fin. Si no se indica inicio y fin se generan entre 0 y 1
runif(5) # 5 números al azar entre 0 y 1
## [1] 0.36124751 0.27944097 0.07655032 0.51075857 0.66329734
runif(5,1,10) # 5 números al azar entre 1 y 10
## [1] 7.588251 8.722883 9.094666 3.539671 6.977387
trunc(runif(20,1,10)) # 20 números enteros al azar entre 1 y 10
## [1] 6 9 8 7 9 7 4 4 2 6 8 9 1 9 6 7 3 1 1 4
Suma todos los elementos de un vector x
x <- runif(100,1,10) # Se generan 100 números al azar entre 1 y 10 y se guardan en la variable x
sum(x) # Suma de los 100 números al azar
## [1] 586.0735
Lee una línea de texto del teclado. El programa queda detenido hasta que el usuario escribe algo y pulsa ENTER. Si introducimos números deberán ser convertidos a números.
Ejemplo 1:
encuesta <- function() {
r <- readline("¿Te gusta R? (s/n) : ")
if ( r == "s" || r == "S") {
cat("¡Estaba seguro de eso!\n")
return(invisible(0))
} else {
cat("¿Estás seguro/a? Creo que te has equivocado al responder.\nVuelve a intentarlo.\n\n")
encuesta()
}
}
> encuesta()
¿Te gusta R? (s/n) : s
¡Estaba seguro de eso!
> encuesta()
¿Te gusta R? (s/n) : n
¿Estás seguro/a? Creo que te has equivocado al responder.
Vuelve a intentarlo.
¿Te gusta R? (s/n) : n
¿Estás seguro/a? Creo que te has equivocado al responder.
Vuelve a intentarlo.
¿Te gusta R? (s/n) : s
¡Estaba seguro de eso!
Ejemplo 2:
edad <- function() {
r <- readline("Escribe tu edad : ")
r <- as.integer(r) # Convierte r en un entero. Si se desean decimales usar as.double()
rmas1 <- r + 1
cat("Dentro de un año tendrás",rmas1,"años\n")
return(invisible(rmas1))
}
> edad()
Escribe tu edad : 17
Dentro de un año tendrás 18 años
Devuelve T si algún elemento cumple la condición Ejemplo:
x <- runif(10, -10 ,100) # Se generan 10 números aleatorios entre -10 y 100
if(any(x < 0)) cat("En x hay números negativos\n") # Si algún números de x es negativo
## En x hay números negativos
# muestra un mensaje