Curso de R

El lenguage de programación R

¿Qué es R?

  • R es un lenguaje y un entorno de computación y gráficos estadísticos.

  • La página del proyecto es: https://www.r-project.org/.

  • El entorno de por si, cuenta con un gestor de búsqueda : http://www.rseek.org/.

  • R ofrece una amplia variedad de técnicas estadísticas importantes como la regresión lineal, análisis de series temporales, booststrap, estimación de máxima verosimilitud, etc.

Características de R

  • Como lenguaje de programación incluye estructuras de programación como :condicionales, bucles, funciones recursivas definidas por el usuario, etc. La habilidad para combinar funciones de R, produce una óptima flexibilidad y además resulta de ser una técnica muy útil. Por ejemplo
f <- function (x) {
   c(x=x, floor=floor(x), ceiling=ceiling(x), round=round(x,2), signif=signif(x,2))
 }
 t(apply(t(rt(10,4)),2,f))
  • R, puede realizar tareas computacionalmente intensivas, vinculando lenguajes como C, C++ o Fortran en tiempo de ejecución y mejorar el proceso computacional.

  • Posee facilidades gráficas para el análisis y visualización de datos ya sea en pantalla o en copia impresa, como lo realiza la libreria ggplot2 de Hadley Wickham.

  • R se maneja por paquetes, existe un repositorio oficial de paquetes , organizados por temas:

http://www.cran.r-project.org/web/views/.

  • Varios editores están disponibles para trabajar con R:
  1. RStudio.
  2. Eclipse.
  3. Vim-R-Tmux.
  • R proporciona una visión general del aprendizaje estadístico, posee un conjunto de herramientas esenciales para dar sentido y resolución a los grandes y complejos conjuntos de datos que han surgido en campos que van desde la biología, las finanzas. el marketing , la astrofísica en los pasados 20 años.

Programación Orientada a Objetos en R

  • R hereda de S, la programación orientada a objetos, que puede ser útil en problemas de Regresión Lineal.
  • R posee polimorfismo, lo que significa que una única función puede ser aplicada a diferentes tipos de entradas, procesando la función de una manera apropiada en cada caso (función genérica). Ejemplo de esto es la función plot().
  • Se maneja este paradigma mediantes las clases clases S3 y clases S4.
library(pryr)

df <- data.frame(x = 1:10, y = letters[1:10])
otype(df)

Programación Funcional en R

  • R es un lenguaje de programación funcional (FP), esto significa que proporciona muchas herramientas para la creación y manipulación de las funciones.

En particular, R tiene lo que se conoce como funciones de primera clase, se puede hacer cualquier cosa con las funciones que se pueden hacer con vectores: se pueden asignar como las variables, almacenarlas en listas, pasarlos como argumentos a otras funciones,etc.

Más información en Advanced R de Hadley Wickham.

Programación Funcional en R

Veamos un ejemplo, con una función linea_color una versión de plot especializada en la selección de color. Es comparable a una fábrica que hace lapiceros de todos los colores:

 linea_color<- function(col) {
  function(...) {
    plot(..., type = "l", lty = 1, col = col)
  }
 }

Si queremos un lapicero rojo, llamamos a linea_color y obtenemos una función que dibuja líneas rojas. La función resultante también puede recibir a otros argumentos como título y fuente:

Programación Funcional en R

 linea_roja<- linea_color("red")
 linea_roja(rnorm(30), main = "Dibujo de una linea roja")

plot of chunk unnamed-chunk-2

Interfaz de R, para otros Lenguajes

  • Podemos escribir funciones de C/C++ para ser llamadas desde R. Un ejemplo de esto es el uso del protocolo TCP, que hace R.

  • R ofrece dos interfaces C/C++ via las funciones .c() y .Call(). Esta última es más versátil, pero requiere algo de conocimiento de la estructura interna de R.

  • Podemos usar R desde Python, usando RPy, una de la más populares interfaces entre esos lenguajes.

Programación en Paralelo en R

  • La computacion paralela hace uso de varios procesadores que trabajan juntos para resolver un tarea específica. Las aplicaciones de la computación paralela incluyen resolver determinados problemas:
  1. Modelos de Simulación.
  2. MCMC.
  3. Bootstrapping, Bigdata, etc.

Más información en el Libro de Parallel R de Q. Ethan McCallum y Stephen Weston o en el artículo de Daniel Marcelino Parallel Processing: When does it worth?.

  • R cuenta con una lista de paquetes para la computación en paralelo

    • Memoria Compartida: parallel, snow, foreach, gputools, HiPLARM.
    • Memoria Distribuida: doSnow,pbdR, Rampi, Rhadoop, RHIPE.
  • Uno de los paquetes más importantes que presenta R es snow (un acrónimo de Simple Network of Workstations) que proporciona una interfaz de alto nivel para el uso de cluster en cálculos paralelos en R.

Más información en la Guia de Usuario de Snow.

Instalación de R

La información de como instalar correctamente R, en un entorno de Ubuntu, se encuentra en la página:

How To Set Up R on Ubuntu 14.04.

Si todo ha salido bien, se puede correr el comando R y ver lo siguiente:

salida

Instalación de Rstudio

RStudio es un IDE para R. Es software libre con licencia GPLv3 y se puede ejecutar sobre distintas plataformas o incluso desde la web usando RStudio Server.

c-lara@Lara:~$ wget https://download1.rstudio.org/rstudio-0.99.893-amd64.deb
c-lara@Lara:~$sudo dpkg -i *.deb
c-lara@Lara:~$rm *.deb

Para ver como funciona RStudio escribiendo código se puede revisar:

R Markdown

R Markdown es un framework para ciencia para crear reportes dinámicos con R, además de ejecutar y guardar código.

R Markdown soporta formatos de salida estáticos y dinámicos que incluye hTML, pdf, beamer-latex, html5T, shiny,etc.

Más información:

R Presentations

R presentations son una característica de RStudio que permiten la creación fácil de presentaciones HTML5 utilizando una combinación de Markdown y R.

El objetivo de R Presentations es crear diapositivas que hagan uso de código R y de ecuaciones de LaTeX tan sencillas como sea posible.

Más información:

Knitr

knitr fue diseñado para ser una máquina de generación dinámica de reportes o documentos que son una mezcla de texto y código que se procesa y devuelve respuestas válidas para la ciencia de datos. El diseño de knitr permite no permite sólo código R, sino de otros lenguajes como Python, Java Script o Awk, además de producir resultados en formatos como LaTeX, HTML5, Markdown, AsciiDoc, etc, como se muestran en los ejemplos de knitr.

El paquete Knitr se instala en R,

install.packages("knitr")
library("knitr")

Knitr es libre, además de poseer muchos ejemplos y demostraciones.

Ayuda en R

Escribamos una declaración en R,

mean(1:10)

Cuando empezamos a escribir código R, es importante saber cómo obtener ayuda y R proporciona muchas formas de hacer esto. Partiendo de que todo es un objeto, podemos hacer lo siguiente:

?mean
?"+"
?"if"
??plotting
??"regression model"

Ayuda en R

Las funciones help y help.search hacen las mismas cosas que ? y ??, respectivamente, pero se necesita incluir argumentos entre comillas. Los siguientes comandos son equivalentes al código anterior:

help("mean")
help("+")
help("if")
help.search("plotting")
help.search("regression model")

Ayuda en R

La función apropos encuentra variables (incluyendo funciones) que coinciden con su entrada. Esto es realmente útil si sólo puede recordar a medias el nombre de una variable que ha creado o una función que desea utilizar. Por ejemplo, supongamos que creamos una variable a_vector:

a_vector <- c(1, 3, 6, 10, 15)
apropos("vector")
[1] "as.data.frame.vector" "as.vector"            "as.vector.factor"    
[4] "a_vector"             "is.vector"            "vector"              
[7] "Vectorize"           

Ayuda en R

Encontrar las variables que contienen una cadena en particular está bien, pero también se puede hacer una comparación con apropos utilizando expresiones regulares. Las expresiones regulares son una sintaxis en varios lenguajes que trata de la coincidencia en las cadenas. Se necesita aprender a usarlos. Cambiarán tu vida. Un simple uso de apropos por ejemplo podría ser encontrar todas las variables que terminan en z o encontrar todas las variables que contengan un número entre 4 y 9:

apropos("z$")
apropos("[4-9]")

Mayor información de expresiones regulares aquí.

Ayuda en R

La mayoría de las funciones tienen ejemplos que puedes ejecutar para tener una mejor idea de cómo funcionan. Se utiliza la función example para ejecutarlos. También hay demostraciones de conceptos que son accesibles con la función demo:

example("plot")
demo(Japanese)

R es modular y se divide en paquetes, algunos de los cuales contienen vignettes, que son documentos cortos sobre cómo usar los paquetes. Se puede explorar todos los vignettes usando browseVignettes:

browseVignettes()

Ayuda en R

También puede acceder a un vignettes específico mediante la función vignette (pero si su memoria es tan mala como la mía, usar browseVignettes combinado con una búsqueda de página es más fácil que tratar de recordar el nombre de un vignette y en qué paquete está):

vignette("Sweave", package = "utils")

El operador de búsqueda de ayuda ?? y browseVignettes sólo encuentran paquetes que hayan sido instalados. Si se desea buscar cualquier paquete, puede utilizar RSiteSearch, que ejecuta una consulta en http://search.r-project.org. Los términos que tenga varias palabras necesitan ser escritos entre llaves.

RSiteSearch("{Bayesian regression}")

Algunos Recursos en Línea de R