R

Tutorial: instalación de la extensión de R para RapidMiner

R

Por popular demanda, voy a explorar cómo de dificultoso es instalar el puente entre R y RapidMiner en Windows y a dejar escrito cómo se hace. Lo instalé hace días en Linux (Ubuntu) sin mayor problema. Pero hay quien parece que haberlos tenido en la ubicua plataforma.

No sé mucho de Windows y las diferentes versiones y configuraciones que pueda tener. Sólo sé que que he probado los pasos de este tutorial sobre un Windows 7 Profesional (creo) de 32 bits.

Matlab es más rápido que R... ¿y?

R

No sé si alguna vez en la vida he visto una copia legal de Matlab. Creo que no. Ni forzando la memoria consigo recordar haber conocido a alguien que haya pagado los 2000 euros que cuesta una licencia comercial en España.

Eso sí, he conocido a mucha gente a la que le gusta mucho. Y que habla maravillas de él, etc. En algún sitio lo habrán probado, presumo.

Los aficionados a Matlab lo son también a comentar lo rápido que es. He desperdiciado largas horas en aburridoras conversaciones acerca de lo veloz que es Matlab haciendo nosequé operaciones (que no realizo ni directa ni indirectamente casi nunca). Y de paso, a comentar lo bien que se compara contra R (¿por chinchar?): alguna vez he tenido que asistir con desigual grado de indiferencia a inopinadas e improvisadas sesiones de programación en las que construir comparativas que demuestren cuánto más gallardamente invierte unas matrices Matlab que R.

Proyectos de R en el Google Summer of Code 2010 (II)

R

Hace ya unos meses hablé de cómo había unos cuantos proyectos relacionados con R en el Google Summer of Code 2010. Recientemente se ha publicado un pequeño resumen de los logros alcanzados:

  • De las quince propuestas originales, arrancaron cinco.
  • De las cinco, cuatro llegaron a buen término.
  • Lamentablemente, el —tal vez— más interesante de ellos, la implementación de un interfaz de R análogo a DBI para bases de datos no relacionales (NoSQL), acabó en nada.

Me consta que este blog lo lee mucha gente relacionada con la universidad. ¿Será que el año que viene tendremos alguna propuesta de España, Colombia, Argentina…?

Rutinas de C en R

R

[Nota: esta entrada está totalmente desactualizada y la mantengo en en blog por una mezcla de sentimentalismo y fidelidad a la “memoria histórica”; el interesado en cómo interconectar R y C (o C++) hoy hará bien en buscar en otra parte.]

Esta entrada que ahora hago es un pequeño tutorial que publiqué en mi primera página de internet a principios de siglo, cuando todavía usaba Windows regularmente. Es posible que gran parte de lo que en ella cuente esté ya mandado a recoger. No obstante, tampoco hace tanto, eché mano de lo que en ella había dejado escrito para ver cómo migrar a Windows algo que había hecho en Linux y… todavía funcionó.

Un grupo de usuarios de R en España... ¿cuándo?

R

Hace poco recibí noticia de la creación de un grupo de usuarios de R en Brisbane, que no deja de ser una ciudad chiquita en un país poblacionalmente chiquito. ¡Y es ya el cuarto en Australia!

Miro también el siguiente gráfico y me da algo de grima:

Mapa de grupos de usuarios de R

¡No hay ni un sólo cerca de Madrid (que es la ubicación que a mí y ahora más me compete)! Así que si alguno de mis lectores está interesado en el asunto, podemos ir urdiendo cómo hacer para colocarle un pinchico rojo a ese mapa justo en Sol.

useR! 2011

La próxima reunión anual de usuarios de R tendrá lugar del 16 al 18 de agosto del 2011 en la Universidad de Warwick, Inglaterra.

Los conferenciantes invitados de este año van a ser Adrian Bowman, Lee Edlefsen, Ulrike Grömping, Wolfgang Huber, Brian Ripley, Jonathan Rougier, Simon Urbanek y Brandon Whitcher.

Los usuarios de R están invitados a preparer charlas y presenter pósters ilustrando el uso de R.

¿Cuándo tocará en España? (Ramón Díaz Uriarte, que forma parte del comité organizador, me ha confirmado en comunicación personal que tardará, que hay una larga lista de candidatos a alojarlas y que vamos a tener que  esperar todavía, me temo).

Representando gráficamente conjuntos de datos pequeños

R

Últimamente me están llegando conjuntos de datos para analizar con muy pocos registros. He aquí un subconjunto de uno de ellos (de hoy y debidamente anonimizado):

nivel.proteina <- c( 11.56, 10.43, 11.00, 10.92, 10.08, 9.98, 10.35,
  9.55, 9.19, 7.00, 6.72, 6.43, 7.43, 7.26, 6.67,  7.49, 8.03, 8.17,
  6.79, 7.68, 7.01, 7.51, 6.90, 7.27, 7.56, 8.61, 8.16, 7.12 )
grupo <- c(0,0,0,0,0,0,0,0,0,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
datos <- data.frame( nivel.proteina, grupo )

Le he estado dando vueltas a la manera de representar gráficamente este tipo de conjunto de datos de la manera en que deben hacerse estas cosas: que con un mero golpe de vista pueda hacerse uno con ellos.

Una tarea para mis lectores: ¡resultados!

R

El otro día dejé planteada una tarea para mis lectores (que han sido menos diligentes que yo, incluso). Trataba de una comparación entre varios métodos para acceder a diccionarios (o hashes) de datos desde R para tratar de identificar el más eficiente en términos de velocidad de acceso.

Acá van los resultados:

n <- 100000
dat <- data.frame( id = paste( "id", 1:n, sep = "_" ),
    valor = rnorm( n ), stringsAsFactors = F )

n.sample <- 20000
seleccion <- sample( dat$id, n.sample )

### Con vectores:
system.time( res <- sapply( seleccion,
    function( x ) dat$valor[ dat$id == seleccion ] ) )

#  user  system elapsed
# 84.79    5.24   90.14

### Con listas:
mi.lista <- sapply( dat$valor, I, simplify = F )
names( mi.lista ) <- dat$id
system.time( res <- sapply( seleccion, function( x ) mi.lista[[x]] ) )

#  user  system elapsed
# 19.15    0.00   19.20

### Con entornos:
mi.entorno.0 <- new.env()
invisible( sapply( 1:n, function(i)
  assign( dat$id[i], dat$valor[i], env = mi.entorno.0 ) ) )
system.time( res <- sapply( seleccion, function( x ) mi.entorno.0[[x]] ) )

#  user  system elapsed
# 67.89    0.03   68.06

### Con el paquete data.table:
require( data.table )
tmp.dat <- dat
tmp.dat$id <- factor( tmp.dat$id )
mi.data.table <- data.table( tmp.dat )
setkey( mi.data.table, id )
system.time( res <- sapply( seleccion,
  function( x ) mi.data.table[ J(x) ]$valor ) )

#   user  system elapsed
# 371.07   25.91  400.39

### Con hashes:
mi.entorno.1 <- new.env( hash = T )
invisible( sapply( 1:n, function(i)
  assign( dat$id[i], dat$valor[i], env = mi.entorno.1 ) ) )
system.time( res <- sapply( seleccion,
    function( x ) mi.entorno.1[[x]] ) )

#  user  system elapsed
#  0.14    0.00    0.14

Los números son tan concluyentes que me excusan de la necesidad de ofrecer explicaciones y distingos. Aunque para que mis lectores no tengan que ir subiendo y bajando por la entrada para realizar comparaciones, los resumo en un gráfico:

El vídeo de la conferencia "alRededores" disponible en DailyMotion

Como nunca conseguí ver el vídeo de la conferencia que di en las I Jornadas de Usuarios de R en noviembre del 2009 directamente desde los servidores de la Universidad de Murcia, lo he subido a DailyMotion. Los 60 minutos de la conferencia están partidos en tres partes que pueden verse consecutivamente aquí.

Nota: al final de cada parte aparece un enlace para continuar a la siguiente.

Paquetes estadísticos: una anécdota sin moraleja

Un banco que gana mucho dinero quiso gastarse un nada desdeñable pellizco de sus ingresos contratando a unos consultores muy resabidos de un país extranjero donde, es fama, todos saben mucho. El resultado fue una documentación ininteligible y un larguísimo programa en VB sin apenas comentarios que se demoraba horas en realizar una simulación trivial.

El banco, cansado de quemar ciclos de CPU en vano, encargó a una consultora local la reimplementación del algoritmo en un afamado paquete estadístico. A falta de documentación, la reimplementación hubo de hacerse tratando de adivinar qué demonios hacía el código original. Prácticamente, fue un proceso de ingeniería inversa.

El paquete multicore de R

R

Tengo acceso a una máquina que, aunque anda un poco corta de memoria, cuenta con ocho CPUs. Tenía unas simulaciones bastante pesadas que correr y quise aprovechar su naturaleza perfectamente paralelizable. Y, de paso, hacer con R lo mismo por lo que he visto a un consultor de SAS cobrar a razón de 3.000 dólares diarios.

En el fondo, es una trivialidad. Supongamos que la función que implementa la simulación se llama foo. Habitualmente, haríamos

Anuncio de la integración de Rapidminer y R

RapidMiner es, posiblemente, la plataforma de minería de datos libre que mejor reputación goza. Hasta la publicación de la versión 5 le veía un pequeño problema: tenía una interfaz bastante poco intuitiva.

Hasta hace pocos días le veía otro: no podía extenderse —al menos de una manera obvia— programando en Java o, preferiblemente, R. Sin embargo, el módulo de integración de R con Rapidminer ya está listo y su lanzamiento va a ser el plato fuerte de RCOMM 2010, la conferencia de usuarios de Rapidminer (oficialmente, RapidMiner Community Meeting And Conference).