El lenguage de programación 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.
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:
library(pryr)
df <- data.frame(x = 1:10, y = letters[1:10])
otype(df)
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.
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:
linea_roja<- linea_color("red")
linea_roja(rnorm(30), main = "Dibujo de una linea roja")
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.
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
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.
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:
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 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 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 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.
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"
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")
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"
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í.
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()
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}")
http://www.r-bloggers.com/. Todo lo referente al ecosistema R, esta aquí, gracias a la contribucion de más o menos 450 bloggers.
Stack Overflow, Es un sitio para encontrar soluciones a problemas informáticos. http://stackoverflow.com/questions/tagged/r.
http://zoonek2.free.fr/UNIX/48_R/02.html Uno de los mejores cursos sobre R. Hecho por Vincent Zoonekynd.
Recursos de UCLA para aprender R: http://www.ats.ucla.edu/stat/r/.