/ / Problème de configuration des options de tracé de réseau à l'aide de rpy2 - python, r, rpy2, lattice

Problème de configuration des options de tracé de réseau à l'aide de rpy2

J'essaie de créer une carte thermique ou une intensité de couleurtracer en utilisant les données d'un tableau numpy, en utilisant rpy2 et lattice. J'utilise "python 2.6.2, R 2.10.1, rpy 2.1.9, je ne sais pas quelle version de réseau. Je l’ai parfaitement fonctionné, mais je dois modifier le paramètre de réseau par défaut pour la tracer les niveaux de la variable pertinente (z). Plus précisément, je veux des niveaux de gris au lieu de la rampe par défaut magenta-cyan. Voici le code permettant de générer une trame de données fictive et de créer la représentation graphique de niveaux de gris dans vanilla R:

library(lattice)

x <- rep(seq(1,10), each=10)
y <- rep(seq(1,10), 10)
z <- abs(rnorm(100))
z <- z/max(z)
df <- data.frame(x=x, y=y, z=z)

grayvector <- gray(seq(0,1,1/100))

foo <- levelplot(z ~ x * y, data=df, col.regions = grayvector)
print foo

Avec rpy2, je ne peux pas définir l'argument col.regions. Selon la documentation, rpy2 est supposé convertir n'importe quel fichier. caractères dans les arguments de la fonction à _. Cela ne semble pas fonctionner, cependant, car utiliser col_regions a pour résultat que l’argument est ignoré. Voici le code python qui produit le diagramme de niveau, mais sans niveaux de gris:

from __future__ import division
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
r = ro.r
lattice = importr("lattice")

grayvector = r.gray( r.seq(0, 1, 1/100))
x = r.rep(r.seq(1,10), each=10)
y = r.rep(r.seq(1,10), 10)
z = r.abs(r.rnorm(100))

df = {"x": x, "y" :y, "z":z}
df = ro.DataFrame(foo)

formula = ro.Formula("z ~ x * y")
formula.getenvironment()["z"] = df.rx2("z")
formula.getenvironment()["y"] = df.rx2("y")
formula.getenvironment()["z"] = df.rx2("z")

foo = lattice.levelplot(formula, data=df, col_regions = grayvector)
print foo

Est-ce que quelqu'un sait comment utiliser les arguments d'une fonction de réseau avec un fichier. en eux dans RPY2?

Réponses:

4 pour la réponse № 1

Vous devez spécifier le mappage d'arguments manuellement:

from rpy2.robjects.functions import SignatureTranslatedFunction
lattice = importr("lattice")
lattice.levelplot = SignatureTranslatedFunction(lattice.levelplot,
init_prm_translate={"col_regions": "col.regions"})
foo = lattice.levelplot(formula, data=df, col_regions=grayvector)

Et aussi vérifier ceci: http://rpy.sourceforge.net/rpy2/doc-2.2/html/robjects_functions.html

Il est important de comprendre que le la traduction se fait en inspectant la signature de la fonction R, et que pas grand chose à deviner du R points de suspension "..." chaque fois que présents.