Licenciado bajo Creative Commons BY-NC-SA 4.0.
R es un lenguaje de programación de scripting orientado al análisis estadístico y gráfico. Cuenta con una nutrida masa de usuarios y desarrolladores que lo han convertido en líder indiscutible dentro de la comunidad estadística internacional, tanto en el ámbito empresarial como en el académico.
Vamos a utilizar R desde la aplicación gráfica RStudio, un IDE (Integrated Development Environment) que proporciona un espacio de trabajo muy amigable y muy similar al de MATLAB.
R se puede instalar desde la página web The Comprehensive R Archive Network, mientras que la versión gratuita de Rstudio se puede descargar desde la página de download de Rstudio
RStudio proporciona un espacio de trabajo muy amigable y similar al de MATLAB. Al abrir el programa, se distinguen cuatro regiones de arriba a abajo y de izquierda a derecha:
Run
, automáticamente se ejecuta en el panel de debajo, la consola.# Esto es un comentario
# Un cálculo simple
2^10 - 24
## [1] 1000
Operador de asignación: <-
(=
también es válido)
x <- 1
x = 1
Si se quiere poner dos instrucciones en la misma línea, hay que separar con punto y coma. Escribiendo solo la variable en la terminal mostraremos su valor por terminal
# Two commands in the same line
x <- 2^10 - 24; x
## [1] 1000
Creación de secuencias:
# secuencia simple
x <- seq(1, 2, 0.1); x
## [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
# secuencias más compleja usando la función seq(inicio, final, paso)
y <- seq(1, 2, 0.1); y
## [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
#Una secuencia algo más heterogenea, hecha como
# na concatenación (`c`) de dos partes (1, 5 y seq(100, 110, 2))
z <- c(1, 5, seq(100, 110, 2)); z
## [1] 1 5 100 102 104 106 108 110
Acceso a elementos de una secuencia:
x <- 1:10;
# Accedemos al primer elemento de la secuencia
x[1]
## [1] 1
¿Qué hace tal o cuál función? La ayuda de R es muy completa. Tenemos la búsqueda específica por nombre de función:
? c
Declaración de funciones:
# Ejemplo: Fibonacci, que admite dos parámetros:
# - n: numero de valores de la secuencia que queremos calcular (required)
# - full: Indica si quermos que la función devuelva
# toda la secuencia o solo el último valor (optional) DEFAULT=FALSE
fibonacci <- function(n, full=FALSE) {
# Reservamos memoria para el vector
fibvals <- numeric(n)
# ponemos los dos primeros valores de la secuencia
fibvals[1] <- 1
fibvals[2] <- 1
# Bucle para calcular el resto de valores
if (n > 2) {
x <- 3:n
for (i in x) {
fibvals[i] <- fibvals[i-1] + fibvals[i-2]
}
}
# Por defecto, devolvemos el valor en la posicion n
if (!full) {
return(fibvals[n])
}
# en otro caso, retornamos toda la secuencia
else {
return(fibvals)
}
}
# Pedimos el décimo elemento
fibonacci(10)
## [1] 55
# Toda la serie hasta el décimo elemento
fibonacci(10, TRUE)
## [1] 1 1 2 3 5 8 13 21 34 55
Los paquetes base
y stats
son fundamentales en R (vienen por defecto) y nos proveen de gran cantidad de funciones básicas que en otros lenguajes deberíamos implementar por nuestra cuenta. Echemos un vistazo a las distribuciones disponibles. Léase lo siguiente, donde disponemos de links a la ayuda de las diferentes distribuciones:
? distributions
Vemos que, para cada distribución xxx
, hay cuatro funciones disponibles:
rxxx(n, ...)
genera \(n\) muestras aleatorias distribuidas según xxx
.dxxx(x, ...)
devuelve \(f(x)\) para un valor o conjunto de valores, donde \(f\) es la función de densidad. Por tanto, para cualquier xxx
, dxxx(Inf) == dxxx(-Inf) == 0
.pxxx(q, ...)
devuelve \(F(q) = \int_{-\infty}^q f(x)dx\), donde \(F\) es la función de distribución que hemos visto en teoría (basta cambiar la notación integral por sumatorios en el caso de distribuciones discretas). Por tanto, pxxx(Inf) == 1
.qxxx(p, ...)
devuelve el \(q\) para el que \(F(q) = p\). Es decir, la función inversa a la anterior, y pxxx(1) == Inf
.Generamos 1000 muestras de una \(N(0,1)\) (normal de media 0, varianza 1) y simplemente vemos lo generado
# Generamos valores random de una distribucion normal
x <- rnorm(1000, 0, 1)
# Mostramos los valores obtenidos
plot(x)