Capı́tulo 1 De cómo usar R en un tiempo razonable (no fácil, no) En este capı́tulo se incluyen algunos consejos prácticos para trabajar con R. Las posibilidades son enormes, pero como casi todo, para dominarlo se requiere tiempo y dedicación. Si llevas tiempo utilizándolo con unas pocas lı́neas de código haces lo que con programas basados en menú te cuesta horas (y cuando lo vuelves a repetir te vuelve a costar horas porque tu aprendizaje no te ahorra tiempo futuro lo que en R no ası́). Cuando usamos un programa informático hay dos problemas fundamentales que, dependiendo de la persona, uno puede ser mucho mayor que el otro. Un problema es el manejo del dichoso programa. ¿Cómo se ha diseñado el interfaz? ¿Dónde han puesto tal o cual opción de la técnica? En fin, no vale la pena seguir. Se asume que un buen menú es la clave de un buen programa (sobre todo, para un usuario inexperto). En definitiva, se trata de eliminar cualquier tipo de aprendizaje (inicial o posterior) para que sea de uso inmediato. Algunas personas (entre las que me encuentro) piensan que eso no está tan claro y que lo que no pierdes (no me atreve a hablar de ganar) al principio lo pierdes más tarde. Programas como R basados en el uso de un lenguaje sencillo permiten un aprendizaje rápido y profundo. Aprendes Estadı́stica al mismo tiempo que aprendes a manejar el programa. Y, desde un punto de vista docente, es una razón importante para utilizarlo. En este capı́tulo he ido incluyendo distintas cuestiones básicas para el uso del programa. Desde el cómo conseguirlo o instalarlo hasta cómo trabajar con él. Mucho de lo que sigue se basa en mi propia experiencia. De hecho, muchos estudiantes a los que sugieres formas de trabajo, utilizan otros trucos que les resultan más útiles. Es importante darse cuenta de que es un programa abierto y que, fácilmente, lo puedes integrar con otras herramientas informáticas. La idea es: elige el editor que quieras y a traajar. 1.1. Instalación y cómo trabajar con R El R consta de un ”sistema base”, y de paquetes adicionales que extienden su funcionalidad. La dirección básica es http://cran.r-project.org. Allı́ se tienen tanto las fuentes como versiones compiladas para Windows, Mac y Linux. Existen numerosos manuales de R. La mayorı́a en inglés, pero también los hay en castellano. Puedes encontrarlos en: 1 http://www.r-project.org/manuals.html http://www.r-project.org/other-docs.html Antes de empezar a trabajar con el R, debemos saber que es un lenguaje orientado a objetos. Bajo este complejo término se esconde su simplicidad y flexibilidad. Además es un lenguaje interpretado (como Java) y no compilado (como C, C++, Fortran, Pascal, . . . ), lo cual significa que los comandos escritos en el teclado son ejecutados directamente sin necesidad de construir ejecutables. Su sintáxis es muy simple e intuitiva. Veamos cómo instalarlo. 1.1.1. R y Windows Los puntos a seguir para una instalación son los siguientes: 1. a) Traer la distribución base de cran. b) El programa se instala simplemente ejecutándolo. c) Una vez instalado en el menú principal tenemos una herramienta que permite seleccionar el espejo desde el que traer los paquetes adicionales cómodamente. 2. Una vez instalado el programa la opción más cómoda es utilizar el programa Tinn-R: https://sourceforge.net/projects/tinn-r. Vamos escribiendo el código en su editor y tiene muchas herramientas para interactuar con R. Es, sin duda, la mejor opción para Windows. 3. Una segunda opción es utilizar RWinEdt. Para poder usarlo hay que tener instalado Winedit: http://www.winedt.com. Es un programa shareware muy útil para escribir en LATEX. Una vez instalado WinEdt cargamos el paquete RWinEdt ?. 1.1.2. R y Linux Instalación 1. Para Linux hay distintas versiones compiladas que puedes encontrar en cran. 2. No es complicado compilar R a partir de las fuentes. Hay que tener la precaución de tener gfortran. 3. Cuando instalamos R en Linux hemos de instalar previamente la librerı́a BLAS. En Linux sin duda la mejor opción de trabajo es Edición con Emacs y ESS utilizar Emacs (http://www.gnu.org/software/emacs/) con el paquete Emacs Speaks Statistics (ESS) 1 . ¿Cómo trabajamos con Emacs y ESS? 1. 2. 3. 4. Abrimos el fichero R con Emacs. Abrimos una nueva ventana (mejor separada) con CTRL x 52. En la nueva ventana marcamos el icono de R. Utilizamos la ventana donde está el código para editar y podemos usar los distintos controles que nos dá el menú ESS de emacs podemos trabajar muy cómodamente. 1 La mejor opción es acudir a la página de los paquetes binarios y buscar en la distribución correspondiente donde teneis el paquete 2 1.2. Empezamos a trabajar con R Al inicializar el programa, aparece una ventana titulada R Console que indica la versión de R y cómo obtener información de la licencia de uso. Esta ventana contiene una barra con los siguientes menús: ARCHIVO: Operaciones básicas con los ficheros. Dentro de este menú nos pueden interesar las opciones: Cambiar dir. Para cambiar el directorio de trabajo. Salir. Para salir del programa Editar. Tı́pico menú con opciones de edición (copiar,pegar,...) Misc. Opciones avanzadas, entre las que podemos utilizar: Parar computación actual. Para detener los procesos activos. Listar objetos Remover todos los objetos. Para borrar todos los objetos en memoria. Paquetes. Nos permitirá gestionar los paquetes adicionales de R. Ayuda La consola permite una interacción con el intérprete de lenguaje R. A grandes rasgos, como ya hemos comentado, se trata de un lenguaje de alto nivel, al estilo de Octave/Matlab, pero orientado a la computación estadı́stica. En realidad es un lenguaje con la semántica del Lisp/Scheme (con clausuras), lo que lo hace mucho más elegante que Octave y Splus. 1.3. Primeras nociones de R Técnicamente hablando, R es un lenguaje de expresiones con una sintaxis muy simple. Consecuente con sus orı́genes en UNIX, distingue entre mayúsculas y minúsculas, de tal modo que A y a son sı́mbolos distintos y se referirán, por tanto, a objetos distintos. Las órdenes elementales consisten en expresiones o en asignaciones. Si una orden consiste en una expresión, se evalúa, se imprime y su valor se pierde. > 2+3 [1] 5 > Una asignación, por el contrario, evalúa una expresión, no la imprime y guarda su valor en una variable. > a=2+3 > Las órdenes se separan mediante punto y coma, (‘;’), o mediante un cambio de lı́nea. Si al terminar la lı́nea, la orden no está sintácticamente completa, R mostrará un signo de continuación, por ejemplo + en la lı́nea siguiente y las sucesivas y continuará leyendo hasta que la orden esté sintácticamente completa. Para borrar una variable, (y que no nos la guarde más en memoria) utilizamos la función rm(). >rm(a) 3 La ayuda en lı́nea de R proporciona información muy útil sobre cómo utilizar las funciones. La ayuda se encuentra disponible directamente para una función dada. Por ejemplo: > ?lm mostrará dentro de R, ayuda para la función lm() (modelo lineal). El comando help(lm) o help(”lm”) tiene el mismo efecto. Para ver la ayuda en formato html (por ejemplo a través de Mozilla) escribe el comando: > help.start() Con esta ayuda en html es posible realizar búsquedas usando palabras clave. 1.4. Introducir datos Al trabajar con comandos, podemos definir distintas estructuras de datos: vectores, matrices, listas, data frame (hoja de datos), etc, ... Definir vectores. Para crear un vector, x, consistente en cinco números, por ejemplo 10.4, 5.6, 3.1, 6.4 y 21.7, utilizaremos el comando: > x = c(10.4, 5.6, 3.1, 6.4, 21.7) Los elementos de un vector también pueden ser caracteres, en este caso deberemos escribirlos entre comillas, por ejemplo: > x = c("blanco", "negro, "rojo") Generación automática de vectores. Si queremos generar una secuencia regular de números enteros, por ejemplo de 1 hasta 10: > x=c(1:10) > x [1] 1 2 3 4 5 6 7 8 9 10 > El operador ”:”tiene prioridad sobre otros operadores aritméticos: > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) [1] 1 2 3 4 5 6 7 8 9 La función seq genera también secuencias de números reales: > seq(1,5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 el primer argumento indica el principio de la secuencia, el segundo el final y el tercero el incremento que se debe usar para generar la secuencia. Otro comando útil serı́a rep. 4 > x=rep(2,10) > x [1] 2 2 2 2 2 2 2 2 2 2 > x=rep(c(2,3),5) > x [1] 2 3 2 3 2 3 2 3 2 3 > x=rep(c(3,2),c(4,5)) > x [1] 3 3 3 3 2 2 2 2 2 > Matrices. Una matriz se puede crear con la función matrix: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) La opción byrow indica si los valores en data deben llenar las columnas sucesivamente (por defecto) o las filas (if TRUE). La opción dimnames permite asignar nombres a las filas y columnas. Veamos algunos ejemplos: > matrix(data=5, nr=2, nc=2) [,1] [,2] [1,] 5 5 [2,] 5 5 > matrix(1:6, 2, 3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > x=matrix(1:6, 2, 3, byrow=TRUE) > > x [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 Para acceder a uno de los elementos de la matriz se utilizan corchetes >x[1,3] [1] 3 Otra estructura especialmente importante es la clase data.frame La clase data.frame Una hoja de datos (data frame en inglés), es una lista de datos, de forma que cada variable ocupa una fila de la lista, y donde todas las componentes son de la misma longitud. Por ejemplo: >f1=data.frame(nombre=c("Jose", "Eva", "Nacho"), edad=c(25,32,18),altura=c(1.83,1.78,2.01),estudios=c("II", "ITG", "II")) > f1 nombre edad altura estudios 1 Jose 25 1.83 II 2 Eva 32 1.78 ITG 3 Nacho 18 2.01 II > 5 Para trabajar con data.frame’s podemos utilizar las siguientes funciones: dim(): Nos da el número de filas (observaciones) y de columnas(variables) del data.frame. length(): Nos da el número de columnas (variables). El sı́mbolo $ nos permite seleccionar una columna del data.frame. f1$altura Por último tenemos la estructura de listas. Una lista (para el R) es una lista ordenada (como un vector) de objetos que pueden ser, o no, de tipos diferentes. Se le puede dar un nombre a cada componente de la lista. Para extraer sublistas de la lista utilizaremos el comando [ ], pero si queremos acceder al objeto que hay en una componente determinada necesitamos el operador [[ ]] o el operador $. Veeamos un ejemplo: > l1 = list( c("Pedro","Juan"), c(33, 22, 10), c(T, T, F) ) > l1[1] [[1]] [1] "Pedro" "Juan" > l2 = list( nombre=c("Pedro", "Juan"), edad=c(33, 22, 10), professor=c(T, T, F) ) > l2$nombre [1] "Pedro" "Juan" 1.5. Interfaz gráfica: RCommander El R dispone de una interfaz gráfica, que podemos instalar desde el menú Paquetes, cargando el paquete Rcmdr (Necesitará instalar y cargar otra serie de paquetes, pero lo hará automáticamente). Una vez cargado, aparecerá una interfaz gráfica (basada en Tcl/Tk) que permite acceder a muchas de las órdenes de gestión y análisis de datos del lenguaje R. En esta interfaz, además de la barra de menús, tenemos una ventana de comandos, y otra ventana de resultados. Una vez realizado un análisis, el código que ha utilizado para realizar el análisis aparece en la ventana superior, y los resultados obtenidos se muestran en la ventana inferior. Para todo aquel que empiece a trabajar con R, desde mi punto de vista, el RCommander es un buen punto de inicio, ya que nos permite hacer análisis básicos de forma inmediata, a la vez que nos muestra el código para que nos vayamos familiarizando con la sintaxis del R. 1.6. Elaboración de un informe a partir del código R Una vez hemos analizado un banco de datos hemos de elaborar un informe. Normalmente nos va a llevar más tiempo esta segunda parte que la primera. 1.6.1. Sweave Es conveniente consultar: http://www.statistik.lmu.de/~leisch/Sweave/. Puedes encontrar un documento de gran utilidad sobre cómo comenzar a utilizar Sweave en: http://cran.r-project.org/doc/contrib/Rivera-Tutorial_Sweave.pdf. 6 1.7. R y Octave/Matlab Es frecuente que un usuario de Octave/Matlab utilice R. En http://cran.r-project.org/doc/contrib/R-and-octave.txt y http://mathesaurus.sourceforge.net/octave-r.html tenéis tablas de equivalencia entre los comandos en ambos programas. También se puede encontrar en http://mathesaurus.sourceforge.net/matlab-python-xref.pdf una tabla de equivalencias entre Matlab/Octave, Python y R. Si estáis acostumbrados a trabajar en Matlab, echarle un vistazo al Rstudio http://www.rstudio.org/ que permite trabajar con R en un entorno muy similar al de Matlab. 7