Documentos de Académico
Documentos de Profesional
Documentos de Cultura
R
Noviembre 2020
Una función es un fragmento de código con un nombre asociado que realiza una serie de
tareas y devuelve un valor (incluso si este valor es NULL). Al definir una función se
especifica un nombre para este conjunto de sentencias y posteriormente se llamará a esta
función por ese nombre.
#Funciones internas de R R tiene una gran cantidad de funciones internas
como mean(), mode(), son(), etc. Además, al cargar un paquete de R tenemos desde ese
momento disponibles todas las funciones que lo componen.
Entre las funciones internas de R encontramos:
Funciones matemáticas
Funciones de distribuciones
Funciones cadena
Funciones de cuadro de datos
etc.
En general se dice que una función toma unos argumentos y devuelve un resultado.
El cuerpo de la función debe ir encerrado entre llaves en el caso de que haya más de una
sentencia.
{cuerpo_de_la_funcion }
Las funciones se crean utilizando la función function() y se almacenan como objetos de
R. Las funciones pertenecen a la clase “function”.
La sintaxis para definir una función es,
donde,
Argumento Descripción
lista de parámetros Son los valores, variables u otros objetos de R que se pasan como entrada de la
nombre
por posición
una mezcla de por nombre y posición
Ejemplo 1
Cuando un argumento es pasado por nombre, sale del orden de la lista de los argumentos
de la función, mientras que el resto de los argumentos mantienen el orden en el que fueron
declarados en la función.
args(lm)
## function (formula, data, subset, weights, na.action, method = "qr",
## model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok =
TRUE,
## contrasts = NULL, offset, ...)
## NULL
En general es recomendable pasar los argumentos por nombre para evitar posibles
confusiones.
En R el proceso de emparejar valores con argumentos sigue estos pasos:
##Evaluación perezosa
Los argumentos de una función son evaluados únicamente si es necesario. Esta propiedad
se conoce como “evaluación perezosa” (lazy evaluation),
Ejemplo 2 En la siguiente función f() hay dos arguemntos el a y el b. Cuando se
ejecuta f(2) el argumento a=2 y el b permanece missing. Como b no interviene en el
cálculo del valor de la función no se produce error, es decir R nunca se pregunta por el
valor de b y por lo tanto no se entera que no ha sido especificado.
f <- function(a, b) {
a^2
}
f(2)
## [1] 4
mean
## function (x, ...)
## UseMethod("mean")
## <bytecode: 0x000000001591ab28>
## <environment: namespace:base>
args(paste)
## function (..., sep = " ", collapse = NULL, recycle0 = FALSE)
## NULL
args(cat)
## function (..., file = "", sep = " ", fill = FALSE, labels = NULL,
## append = FALSE)
## NULL
Una vez que se utiliza … el resto de los argumentos deben pasarse por nombre y no se
permite el emparejado parcial.
args(paste)
## function (..., sep = " ", collapse = NULL, recycle0 = FALSE)
## NULL
paste("a", "b", sep = ":")
## [1] "a:b"
paste("a", "b", se = ":")
## [1] "a b :"
x <- c(1,2,3,4,5)
mean(x)
## [1] 3
nuestramediana(x)
## [1] 3
Los parámetros se pasan a la función por posición y no por valor. Esto permite utilizar los
mismos nombres dentro y fuera de la función, ya que para R son objetos distintos.
Ejemplo 5: Función logaritmo en base 5
curve(sin, -pi,pi)
##Por qué utilizar funciones
Las ventajas de dividir un programa en funciones son múltiples entre ellas señalaremos:
Ejercicios
1.- Sea la función y=f(x)y=f(x) definida por
f(x)=⎧⎩⎨⎪⎪−x3x2x−−√x≤00<x≤1x>1f(x)={−x3x≤0x20<x≤1xx>1
x n h(x,n)
0.3 55 1.428571
6.6 8 4243335.538178
(cos(θ)sin(θ)sin(−θ)cos(θ))(cos(θ)sin(−θ)sin(θ)cos(θ))
8. El juego de los dados es como sigue. Primero se lanzan dos dados, sea xx la
suma de los dados. Si x=7x=7 o x=11x=11 ganas, en otro caso sigues tirando
hasta obtener la tirada de la primera vez, en cuyo caso ganas o hasta obtener 7 u
11 en cuyo caso pierdes. Escribe un programa que simule el juego. Puedes utilizar
la siguiente línea que simula el lanzamiento de dos dados, x <-
sum(ceiling(6*runif(2))).
9. Supongamos que (x(t),y(t))(x(t),y(t)) tienen como coordenadas polares (t√,2πt)
(t,2πt). Dibuja un gráfico (x(t),y(t))(x(t),y(t)) para t∈[0,10]t∈[0,10]. Debería tener
el aspecto siguiente,