Séptima sesión con Rcmdr: paquetes y combinatoria. Datos en tablas

En la anterior sesión dejamos pendiente el problema de simular los lanzamientos de un par de dados. Queremos obtener resultados como (1,3) , (5,2), (4,3), etc. Vamos a utilizar este problema para aprender algunas cosas más sobre R.

Instalando paquetes adicionales

Más adelante, cuando veamos las estructuras básicas de bucles e iteración en R, dispondremos de otras maneras de construir los resultados. Pero, por el momento, para generar los valores que queremos, es mejor que nos aprovechemos del trabajo que otros han hecho por nosotros.

Una de las ventajas que se desprenden del hecho de que R sea un programa de código abierto esla gran cantidad de paquetes de código R que se han escrito, para resolver los problemas más variados. Ya hemos visto cómo guardar nuestros propios fragmentos de código en R. Otros usuarios, a menudo expertos en R y en alguna de sus aplicaciones, escriben sus propios fragmentos de código, para resolver problemas (a veces muy sofisticados). Y después ponen esos fragmentos de código, llamados a veces paquetes o librerías,  a disposición de la comunidad de usuarios de R, de forma libre y gratuita. A fecha de hoy, R-cran, que es el mayor almacén de código R,  contiene más de 4000 de esos paquetes. Para que te hagas una idea de lo que aportan, y lo elaborados que pueden lleagr a ser, la interfaz R-Commander que estamos usando es uno de esos paquetes.

Cuando instalas  R en tu ordenador, normalmente sólo instalas una pequeña parte de esos paquetes, para no hacer la instalación innecesariamente larga y complicada.Si quieres ver la lista de paquetes instalados en tu máquina, en la ventana Rgui (no es Rcmdr) utiliza el menú PaquetesCargar paquete…, y verás esa lista. Si en algún momento necesitas uno de los paquetes  que no llegaste a instalar, puedes conectar con un almacén en Internet, descargarlo e instalarlo de forma casi automática. Veamos cómo.

Para la sesión de hoy quiero usar un paquete que se llama gtools, que contiene, entre otras cosas, código para hacer Combinatoria. Cuando R arranca, lo normal es que sólo algunos de los paquetes instalados en nuestra máquina están disponibles (de nuevo para ahorrar recursos).  Para saber si el paquete gtools es uno de los que están instalados puedo buscarlo en la lista que hemos visto antes, o puedo teclear este comando, con el que le digo a R que quiero usar ese paquete:

library("gtools")

En este caso, el color rojo de la ventana de mensajes nos indica que algo ha ido mal, porque el paquete gtools no está instalado en nuestra máquina. Para instalarlo (conectados a internet, claro) tenemos que dirigirnos a la ventana  titulada Rgui, y usar el menú Paquetes → Instalar paquete(s)… Se abrirá una ventana, titulada CRAN mirror, en la que elegimos un mirror o almacén de paquetes R  Es conveniente elegir uno cercano geográficamente, así que yo voy a elegir Spain (Madrid). Tras unos instantes, en los que R descarga la lista de todos los paquetes disponibles en ese almacén, aparece una larga lista alfabética de paquetes. Ya casi hemos acabado, basta con localizar en esta lista el paquete gtools y pulsar en Ok

Si es el primer paquete que instalamos aparecerá una pregunta, en la que nos piden permiso para crear un “almacén local” de paquetes descargados en nuestro ordenador. Aceptamos, y comienza la descarga e instalación del paquete.

Cuando la instalación acabe, vuelve a Rcmdr, limpia la ventana de mensajes, y ejecuta de nuevo el comando library(“gtools”).  La ventana de mensajes ahora debería aparecer en verde. Ya podemos empezar el trabajo.

Permutaciones y combinaciones.

Los problemas típicos de la  Combinatoria más sencilla consisten en formar las combinaciones o permutaciones de unos objetos dados. En España distinguimos también variaciones, pero la tradición anglosajona considera las variaciones como otro tipo de permutaciones. Recordemos que la diferencia entre unas y otras estriba en que, en las combinaciones, el orden en que se colocan los objetos no importa. En cambio en las permutaciones-variaciones, dos listas se consideran distintas si los objetos aparecen en ellas en un orden distinto.

El paquete gtools añade dos funciones nuevas a R, permutations y combinations, que nos van a servir precisamente para obtener esos resultados.  No se trata de saber cuántos hay, sino, de hecho, de construirlos y enumerarlos. Para verlas en acción vamos a utilizar estos comandos para fabricar todas las listas posibles de tres elementos, elegidos de entre cuatro posibles. Para empezar, no admitimos repeticiones de los elementos. Entonces, si el orden no importa, estamos formando las combinaciones de cuatro elementos tomados de tres en tres. Y si el orden importa, entonces se trata de las variaciones (un inglés diría permutaciones) de cuatro elementos tomados de tres en tres.

Los correspondientes comandos son (recuerda que has debido utilizar primero library(“gtools”)):

combinations(4,3)
permutations(4,3)

Y la salida que se obtiene es, para el primer comando (combinaciones):

> combinations(4,3)
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    4
[3,]    1    3    4
[4,]    2    3    4

mientras que para el segundo comando (permutaciones), la salida es

> permutations(4,3)
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    4
[3,]    1    3    2
[4,]    1    3    4
[5,]    1    4    2
[6,]    1    4    3
[7,]    2    1    3
[8,]    2    1    4
[9,]    2    3    1
[10,]    2    3    4
[11,]    2    4    1
[12,]    2    4    3
[13,]    3    1    2
[14,]    3    1    4
[15,]    3    2    1
[16,]    3    2    4
[17,]    3    4    1
[18,]    3    4    2
[19,]    4    1    2
[20,]    4    1    3
[21,]    4    2    1
[22,]    4    2    3
[23,]    4    3    1
[24,]    4    3    2

que, evidentemente es más larga, puesto que ahora tenemos en cuenta la ordenación.

¿Y para lanzar dos dados? Bueno, si queremos obtener resultados equiprobables, debemos distinguir el orden (como si cada dado fuera de un color), y además, a diferencia de los dos ejemplos anteriores, debemos permitir resultados repetidos. Con esas premisas, hacemos

dosDados=permutations(6,2,repeats.allowed=TRUE)
dosDados

y obtenemos  los 36 resultados esperados:

[,1] [,2]
[1,]    1    1
[2,]    1    2
[3,]    1    3
[4,]    1    4
[5,]    1    5
[6,]    1    6
[7,]    2    1
[8,]    2    2
[9,]    2    3
[10,]    2    4
[11,]    2    5
[12,]    2    6
[13,]    3    1
[14,]    3    2
[15,]    3    3
[16,]    3    4
[17,]    3    5
[18,]    3    6
[19,]    4    1
[20,]    4    2
[21,]    4    3
[22,]    4    4
[23,]    4    5
[24,]    4    6
[25,]    5    1
[26,]    5    2
[27,]    5    3
[28,]    5    4
[29,]    5    5
[30,]    5    6
[31,]    6    1
[32,]    6    2
[33,]    6    3
[34,]    6    4
[35,]    6    5
[36,]    6    6

Ahora que ya vemos que esto funciona, podemos pararnos un momento y preguntarnos: estas respuestas que estamos obteniendo, que evidentemente no son vectores, ¿qué són? Y la respuesta es que los objetos como este dosDados que acabamos de fabricar son matrces, una estructura adecuada para almacenar datos en tablas.

Tablas de datos en R, un primer contacto

Las matrices son una de las formas que utiliza R para almacenar y organizar la información. (A este tipo de objetos -vectores, matrices, tablas, etc.- se los conoce en Informática como Estructuras de Datos). Su manejo tiene muchos parecido con lo que ya hemos aprendido en el caso de los vectores. Si vuelves a mirar la anterior matriz (la de los dos dados), verás que R la ha adornado con corchetes, que son de hecho una forma de indicarnos cómo se accede a los distintos elementos de la matriz. Por ejemplo, si escribes:

dosDados[23,]

obtendrás  como respuesta

> dosDados[23,]
[1] 4 5

Es decir, la fila número 23 de la matriz. Si lo que quieres es obtener su segunda columna, escribe

dosDados[,2]

y la respuesta de R será un vector con los elementos de esa columna:

> dosDados[,2]
[1] 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6

Como puede verse, los números entre corchetes que rodean la matriz nos ayudan a recordar  todo esto.  Si queremos, por poner un ejemplo, calcular la suma de los dados en cada tirada, podemos hacer:

sumaTiradas=dosDados[,1]+dosDados[,2]

y veremos aparecer un vector con esas sumas. Y si necesitas saber las dimensiones de la matriz (cuántas filas y cuuántas columnas tiene), puedes usar la función dim:

dim(dosDados[,1])

para averiguar esas dimensiones.Por su parte, la función length te dirá cuántos elementos tiene la matriz (en este caso, 72).

También podemos usar la notación de corchetes para seleccionar los elementos de la matriz que cumplen alguna condición, como hacíamos con los vectores. Por ejemplo, las filas en las que el segundo dado (la segunda columna) es 4 o más, se seleccionan con:

dosDados[dosDados[,2]>=4,]

que produce como resultado una nueva matriz con los resultados que queremos. Atención: los números de fila de esta nueva matriz no se corresponden con los de la original. Antes de cerrar esta entrada, te propongo un pequeño ejercicio: trata de adivinar lo que se obtiene con este comando:

dosDados[(dosDados[,1]+dosDados[,2])>7,]

En esta entrada hemos avanzado bastante, y hemos conseguido nuestro objetivo de representar las 36 tiradas diferentes de dos dados. Todavía podemos ir un poco más allá, pero para eso necesitamos aprender sobre estructuras de control. Con eso estaremos en condiciones de escribir auténticos programas en R. Eso lo veremos en las próximas entradas.

Gracias por la atención.

Anuncios

3 pensamientos en “Séptima sesión con Rcmdr: paquetes y combinatoria. Datos en tablas

  1. Pingback: Octava sesión con Rcmdr. Datos cualitativos. Matrices y dataframes. | PostData

  2. Pingback: Ficheros csv grandes en R | PostData

  3. Pingback: Anova para diseños factoriales con 2 factores (efectos fijos). | PostData

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s