Archives de
Mois : juin 2012

L’attaque des zombies

L’attaque des zombies

Je me souviens qu’en cours d’épidémiologie on avait toujours le droit à  des modèles chiant en compartiments avec leur lot d’équations différentielles et jamais le droit de s’amuser avec des modèles graphiques type automates cellulaires qui pourtant avaient l’air trop cool.

Du coup j’ai essayé sur R pour voir. Le code est surement pas optimal. C’est du trafic (je maitrise mal les matrices) mais du trafic qui fonctionne et surtout je ne voulais pas piquer un code déjà fait. Les règles ? Ils s’agit d’une attaque de zombie qui contaminent les individus adjacents. L’avantage des zombies c’est qu’ils me simplifient grandement la tâche parce qu’il n’y a pas de rémission possible. Alors voyons voir…

library(animation)

#Fonction sur les cells adjacentes
contamine <- function (x, k, where, proba.conta){
k.c <- k + where
k.c <- k.c[k.c <= length(x) & k.c > 0]
k.c <- k.c[which(x[k.c]==0)]
vec.c <- rbinom(length(k.c), 1, proba.conta)
x[k.c] <- vec.c
return (x)
}

#On initialise
grid.n = 10000
grid.ncol = 100
proba.conta = 0.2
x <- matrix(rbinom(grid.n, 1, 0.001), ncol=grid.ncol, byrow=T)

#On fait tourner et on sauve
ani.options(ani.height = 400, ani.width = 400, outdir = getwd(),
nmax = 100, interval = 0.30)
saveGIF(
{for(i in 1:100){
k <- which(x==1)
x <- contamine(x, k, where=1, proba.conta)
x <- contamine(x, k, where=-1, proba.conta)
x <- contamine(x, k, where=grid.ncol, proba.conta)
x <- contamine(x, k, where=-grid.ncol, proba.conta)
if(sum(x)==grid.n){image(x, col="black")}
else{image (x, col=c("white", "black"))}}
}, title="zombies")

Ce qui nous donne :

Facebooktwitter
Package maptools sous Linux, attention aux majuscules

Package maptools sous Linux, attention aux majuscules

Si cet article peut vous économiser une crise de nerfs, autant l’écrire. Hier, j’ai voulu me faire une jolie carte des dernières élections en utilisant le shapefile des communes de France mis à disposition par l’IGN pour un chouette résultat inspiré de ça.

Tout allait très bien jusqu’à ce que je cherche à charger le shapefile dans R avec la fonction readShapeSpatial du package maptools.

commune <- readShapeSpatial("COMMUNE")

Dans les heures qui ont suivies, R m’a renvoyé éternellement la même erreur : Erreur dans read.dbf(filen1) : impossible d’ouvrir le fichier DBF.

Après des heures de prise de tête voilà la solution au problème : la fonction est sensible à la casse de l’extension du fichier *.dbf et pas à celles des *.shp et *.shx. L’IGN fournissant ses fichiers avec l’extension en majuscule, il suffisait donc de passer en minuscules le *.DBF

Grosse galère pour un détail, comme souvent hélas ! A noter que ce problème se pose sous Linux et non sous Windows.


Facebooktwitter