No hay motivo para no actualizar tu R a la última versión

Ayer se publicó la versión 3.1.0 de R. No es gran noticia: aparecen nuevas versiones cada no muchos meses. No hay motivo para no actualizar. Pero sí para hacerlo: las nuevas versiones corrigen errores en las anteriores y, además, encontrarás poco soporte en los foros para ese R 2.1.5 viejuno que aún mantienes por pereza. Para quienes usen R en plataformas donde el software no se actualiza automágicamente, existe el paquete installr que permite actualizar la versión de R con menos esfuerzo que antaño haciendo ...

11 de abril de 2014 · Carlos J. Gil Bellosta

Mapas: cosas casi increíbles que pueden hacerse con R

Nunca pude ser un erizo. Lo intenté durante años y acabé en el sicólogo. Si el cuerpo me hubiese dado, ahora, tal vez, como algunos compañeros de promoción, sería un experto en un área diminuta del conocimiento y corregiría exámenes los fines de semana. Descubrí con tiempo y muchas sesiones de a 60 euros la hora que había nacido para ser un zorro, un merodeador que olisquea aquí y allá. Una lectura superficial de estas páginas que escribo puede dar la impresión de que contienen conocimientos profundos (¡ojalá!). Una lectura profunda, que contiene superficialidades (¡convengo!). Son obra de un zorro. ...

27 de marzo de 2014 · Carlos J. Gil Bellosta

Totales agregados por bloques en tablas

En ocasiones uno quiere añadir un total calculado en ciertos bloques a una tabla. Por ejemplo, en la tabla set.seed(1234) ventas.orig <- data.frame( cliente = rep(1:10, each = 5), producto = rep(letters[1:5], times = 10), importe = rlnorm(50)) tenemos clientes, productos e importes. Y nos preguntamos por el porcentaje en términos de importe que cada producto supone para cada cliente. Una manera natural pero torpe de realizar este cálculo consiste en usar un objeto intermedio y merge: library(plyr) tmp <- ddply(ventas.orig, .(cliente), summarize, total = sum(importe)) ventas <- merge(ventas.orig, tmp) ventas$pct.producto <- 100 * ventas$importe / ventas$total No os asustéis, se puede hacer aún peor (p.e., usando sqldf). Pero existen dos maneras, cuando menos, de hacerlo mejor. La primera es usando data.table. ...

25 de marzo de 2014 · Carlos J. Gil Bellosta

Cuatro enlaces sobre R: Excel, C++, CSV y paralelización

Hoy traigo a mis páginas cuatro enlaces que apuntan a recetarios y tutoriales sobre la solución a cuatro problemas que pueden encontrar los usuarios de R: Conectar R y Excel Importar grandes ficheros CSV (y falta LaF) Integrar R con C/C++ Paralelizar código con snow ¡Espero que os resulten útiles!

21 de marzo de 2014 · Carlos J. Gil Bellosta

Los sospechosos habituales y Python

Llamo sospechosos habituales a esos programas y lenguajes para el análisis de datos distintos de R cuya decreciente popularidad nos parece tan natural a los partidarios de este último. Abundan los análisis de cuotas de mercado tales como What Analytic Software are People Discussing? ¿Cuáles son estos sospechosos habituales? Pues SAS, SPSS y algún otro: Stata, Statistica, Minitab,… Sin embargo, R tiene competidores más serios a medio plazo. Uno de ellos, el más importante, es Python. Lo veo a mi alrededor: son muchos los físicos, los ingenieros, los informáticos que tienen experiencia en ese lenguaje y, sintiéndose cómodos en él —y les alabo el gusto— quieren utilizarlo para analizar datos cuando les toca. ...

20 de marzo de 2014 · Carlos J. Gil Bellosta

Series temporales, datos espaciales y espacio-temporales con R

Acaba de publicarse Displaying Time Series, Spatial, and Space-Time Data with R, un libro de Óscar Perpiñán que, conociéndolo como lo conozco, me atrevo a recomendar sin haberlo hojeado siquiera. Además, Óscar nos ha regalado una guía sobre cómo escribir un libro técnico con Emacs y otras herramientas libres.

19 de marzo de 2014 · Carlos J. Gil Bellosta

Selección de enlaces: censos, el Titanic, periodistas y mapas

El primer enlace de la selección de esta semana es The evolution of the modern census. Todos sabemos que lo que llevó a José y María a Belén hace más de 2000 años fue dizque tenían que censarse. Hay noticias de censos anteriores. Desde entonces hasta ahora ha habido muchos, muchísimos censos, pero su mismo concepto y finalidad han ido cambiando a lo largo de la historia: ya no se trata solamente de contar, medir la riqueza o el poderío militar. Ahora nos interesan otros aspectos relacionados ya no tanto con el cuántos sino con el cómo somos. ...

14 de marzo de 2014 · Carlos J. Gil Bellosta

El escritor exemplar

El escritor exemplar es un experimento de escritura automática realizado por Molino de Ideas sobre una idea de Mario Tascón y con la colaboración de Carlos J. Gil Bellosta en conmemoración por los 400 años de la publicación de Las Novelas Ejemplares. Eso reza el pie de página de El escritor exemplar un artilugio que a veces crea frases tales como que debieran ser aleatorias, no muy distintas en estilo de las Novelas Ejemplares y, con muchísima suerte, inspiradoras. ...

13 de marzo de 2014 · Carlos J. Gil Bellosta

Veinte paquetes de R para científicos de datos

Me llegó recientemente un artículo con una lista de veinte paquetes de R para data scientists. Y no la encuentro afortunada. Voy a agrupar esos veinte paquetes en algunas categorías y añadiré comentarios. La primera de ellas es la de manipulación de datos, tal vez la más amplia, que recoge los siguientes: sqldf, plyr, stringr (para procesar texto), lubridate (para procesar fechas), reshape2 y los paquetes de acceso a bases de datos. ...

12 de marzo de 2014 · Carlos J. Gil Bellosta

Guarjolización de fotos con R

Inspirado en esto aunque con la intención de mejorar el horrible código adjunto, escribí el otro día esto: library("biOps") library("cluster") # leo una foto usando readJpeg de biOps # el objeto devuelto es un array mxnx3 dimensional # la última dimensión es el rgb de cada pixel tmp <- tempfile() download.file("http://blog.guiasenior.com/images/Retrato_Garber.jpg", tmp) x <- readJpeg(tmp) # si quieres mostrar la foto como un gráfico... #plot(x) # convertimos el array 3D nxmx3 en uno 2D (nm)x3 # luego buscamos 5 clústers # esencialmente, buscamos 7 "píxeles representativos" d <- dim(x) clarax <- clara(array(x, dim = c(d[1] * d[2], d[3])), 7) # reemplazamos cada rgb de cada cluster por su # "píxel representativo" (medioide) correspondiente rgb.clusters <- clarax$medoids[clarax$cluster,] # convertimos la matriz resultante en un array 3D # (invirtiendo la transformación anterior) # y representamos gráficamente plot(imagedata(array(rgb.clusters, dim = d))) Obviamente, podéis cambiar la foto y hacer variar el número de clústers. Pero conviene recordar que: ...

10 de marzo de 2014 · Carlos J. Gil Bellosta