true

Definir una función

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

Argumento ‘…’ en una función

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

Funciones

c(a1, a2,…)

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"

names(x) <- valor

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

sqrt(x)

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

cat(“texto”,x1,“texto”,x2,…,“\n”)

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

invisible(x)

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

length(x)

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

trunc(x)

Elimina los decimales de un número

trunc(1.999999)
## [1] 1
x <- 56.13
trunc(x)
## [1] 56

round(x,decimales=0)

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

runif(n,inicio=0,fin=1)

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

sum(x)

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

readline(“Texto a mostrar (optativo)”)

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

any(condición)

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