Paralelismo en R: memo[rándum]

Esta es una nota que me dejo a mí mismo sobre paralelización en R para no tener que ir buscándola en otras partes: library(parallel) foo <- function(i){ Sys.sleep(i) } cl <- makeCluster(4) system.time(parSapply(cl, 1:4, foo)) # user system elapsed # 0.025 0.006 4.007 system.time(sapply(1:4, foo)) # user system elapsed # 0.039 0.033 10.001 stopCluster(cl)

15 de junio de 2015 · Carlos J. Gil Bellosta

Ver 53000 filas

Me preguntaban cómo ver con R una tabla con 53000 filas. Mi yo menos diplomático quiso contestar: define ver. Lo reformulé más amablemente y se me contestó: como en Excel. La pregunta es: ¿permite Excel ver 53000 registros? De hecho, ¿se pueden ver 53000 registros? Impresos a razón de línea por centímetro, ocuparían 530 metros y andar a paso vivo del primero al último costaría cinco minutos. Con 53000 registros, ver (como trasunto de entender) es una cosa distinta de tener delante. Lo siento, pero ver otra cosa que la facturación de los últimos quince días o los movimientos de la cuenta del último mes es algo distinto de lo que vacuamente promete Excel.

10 de junio de 2015 · Carlos J. Gil Bellosta

Oh, no, ¡datastepr!

Hoy no estoy de humor. He tratado de completar mi primer anillo en dos años y ha resultado un total fracaso. Mi bici buena estaba pinchada: me he enterado a un kilómetro de casa. He tenido que salir en otra, una de esas viejas de Decathlon, que no sé bien cómo apareció una vez en mi casa, que pesa un quintal y que cambia de marchas cuando y como quiere. No solo me he quedado a la mitad del recorrido sino que, además, he podido constatar cómo el paisanaje de Madrid ha descompuesto todas las fuentes que en el proyecto original jalonaban el recorrido. Supongo que con la inestimable ayuda, por omisión, de nuestros munícipes. Aquello, más que un anillo ciclista, parecía Mad Max I. ...

9 de junio de 2015 · Carlos J. Gil Bellosta

Una de las cosas que me irritan de R

R (y su comunidad) es en ocasiones irritante. Os cuento por qué. El otro día quise pintar un grafo sobre un mapa. No quería usar ninguno de los layouts al uso porque cada nodo estaba georeferenciado. Me interesaba, además, pintar el grafo sobre una capa (de Google Maps u OSM) para contextualizarlo (¿conterrenizarlo?) mejor. No es demasiado complicado escribir una función que haga lo anterior. Pero es razonable pensar que alguien pudiera haberlo hecho antes. Et voilá. Después de mucho buscar, di con las funciones geom_edgeset y geom_nodeset del paquete popgraph que resolvían el problema. ...

8 de junio de 2015 · Carlos J. Gil Bellosta

Grafos por vecindad en mapas

Dando vueltas (infructuosas) al asunto de los cartogramas he dado con un subproducto con el que, por hoy, me conformo: crear un grafo a partir de relaciones de vecindad entre polígonos. La magia, obra de [spdep::poly2nb](http://www.inside-r.org/packages/cran/spdep/docs/poly2nb); el código, library(maptools) library(spdep) library(igraph) # fichero descargado del INE aragon <- readShapePoly("ccaa00c02.shp") plot(aragon) aragon.nb <- poly2nb(aragon) # vértices vertices <- aragon@data vertices$id <- 1:nrow(aragon@data) vertices <- vertices[, c("id", setdiff(colnames(vertices), "id"))] # coordenadas aproximadas de los vértices my.layout.orig <- do.call(rbind, lapply(vertices$id, function(i) aragon@polygons[[i]]@Polygons[[1]]@labpt)) # aristas aristas <- do.call(rbind, lapply(1:length(aragon.nb), function(x) data.frame(from = x, to = aragon.nb[[x]]))) aristas <- aristas[aristas$from < aristas$to,] aristas <- aristas[aristas$from %in% vertices$id,] aristas <- aristas[aristas$to %in% vertices$id,] # grafo g <- graph.data.frame(aristas, directed = FALSE, vertices) plot(g, layout = my.layout.orig, vertex.label = NA, vertex.size = 0.1)

27 de mayo de 2015 · Carlos J. Gil Bellosta

Grafos sobre mapas

He escrito de grafos, he escrito de mapas; hoy hablaré de la combinación de ambas cosas. Tengo un grafo cuyos nodos están geoposicionados. Lo quiero estudiar utilizando herramientas de grafos (vía igraph) pero después representarlos sobre una capa con información geográfica (una foto satelital de Google Maps, vamos). La red va a ser la de guifi.net en los derredores de Barcelona. guifi.net es un proyecto para crear una red de telecomunicaciones mancomunada, abierta, libre y neutral. Quienes forman parte de ella colocan antenas que se conectan con otras de la red y comienzan en enviar bits. Las antenas y sus conexiones conforman una red que se puede estudiar como cualquier otra: ¿qué nodos/enlaces son más centrales/críticos? Etc. ...

18 de mayo de 2015 · Carlos J. Gil Bellosta

Premio al mejor trabajo presentado por un joven en las VII Jornadas de Usuarios de R

Ha pasado un poco desapercibido pero estamos organizando un premio para el mejor trabajo presentado por un ponente nacido después del 1 de enero de 1985 dentro de las VII Jornadas de Usuarios de R. Las bases están aquí. Finalmente, si alguien conoce a alguien que pueda conocer a alguien que quiera dotar el premio, ¡que avise! (Y que lea previamente esto también).

12 de mayo de 2015 · Carlos J. Gil Bellosta

Intervalos de credibilidad para la beta: una alternativa

A partir de los comentarios de Olivier Núñez a mi entrada anterior casi homónima, se nos ha ocurrido a ambos de forma independiente y simultánea una manera alternativa de calcular el intervalo: minimizando su longitud. a <- 3 b <- 5 alfa <- 0.05 # versión de la entrada anterior: f <- function(x){ (dbeta(x[2], a, b) - dbeta(x[1], a, b))^2 + (pbeta(x[2], a, b) - pbeta(x[1], a, b) -1 + alfa)^2 } res <- optim(c(a/(a+b), a/(a+b)), f) res$par #[1] 0.08052535 0.68463436 # nueva versión f.alt <- function(x){ qbeta(x+0.95, a, b) - qbeta(x, a, b) } res.alt <- optim(0.025, f.alt) qbeta(c(res.alt$par, res.alt$par + 0.95), a, b) #[1] 0.08054388 0.68464900

5 de mayo de 2015 · Carlos J. Gil Bellosta

Las VII Jornadas de Usuarios de R buscan patrocinadores

Las VII Jornadas de Usuarios de R buscan patrocinadores. Los organizadores hemos redactado un documento en el que se especifican las modalidades y el mecanismo para que tú o la empresa o institución donde trabajas podáis convertiros en patrocinadores de las Jornadas. Esencialmente, hemos establecido tres categorías —oro, 300 €; plata, 200 € y bronce, 100 €— para empresas e instituciones y una aportación personal y voluntaria de 10 € para participantes y entusiastas. ...

5 de mayo de 2015 · Carlos J. Gil Bellosta

Una curiosa trasposición legal (hecha, manifiestamente, a malagana)

El parlamento de la Unión Europea aprueba directivas. Los parlamentos nacionales las trasponen, es decir, las convierten en leyes nacionales (véase el enlace anterior). No sé hasta qué punto la trasposición tiene que ser literal. La única experiencia seria que tengo es con esta y sus trasposiciones nacionales a España y el RU. Y era notorio cómo cada país, aprovechando las ambigüedades del texto original, arrimaba el ascua a su sardina. He perdido el rato comparando la ley de reutilización de datos del sector público con la directiva que traspone (los enlaces, debajo). Que se parecen, por cierto, como un huevo a una castaña. En particular, la ley española añade provisiones que no aparecen en la directiva para asegurarse de que las administraciones públicas no se obligan ni comprometen a nada. Por lo que si en lugar de haber ley, no la hubiera, las cosas no cambiarían en absoluto. Pero esa es otra historia. ...

29 de abril de 2015 · Carlos J. Gil Bellosta