/ / Conversion d'un script de rpy en rpy2 à l'aide de rpy2.rpy_classic - python, r, rpy2

Conversion d'un script de rpy en rpy2 à l'aide de rpy2.rpy_classic - python, r, rpy2

Je suis un peu novice en matière de python,mais je veux convertir un script python utilisant rpy en un script utilisant rpy2. Rpy est installé quelque part (pour python 2.6.x), mais cela ne fonctionne pas bien avec la version actuelle de R (3.2.0). Nous avons cependant installé rpy2 pour la version de python utilisée dans ces scripts ( Python 2.7 [.5])

Autant que je sache, voici les lignes qui doivent être modifiées (j’ai simplifié un peu la fonction):

from rpy import r

r.library("<libname>", quietly=True)
r("""
func <- function(x,a={options.a},b={options.b})  {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))

et plus tard dans le script, il y a une ligne qui appelle cette fonction:

out = r.func(<python expression>)["o"]

Je peux faire la première moitié comme suit:

import rpy2.rpy_classic as rpy

rpy.set_default_mode(rpy.NO_CONVERSION)

rpy.r.library("<libname>", quietly=True)
rpy.r("""
func <- function(x,a={options.a},b={options.b})  {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))

En essayant ce qui précède à une invite interactive (avec quelques fausses données), le résultat est le suivant:

<rpy2.rpy_classic.Robj object at 0x2b9e48481510>

mais j'ai besoin de la valeur de sortie de la fonction rpy.r.func plutôt que sa valeur non convertie (car je dois obtenir le func(<expression)$o valeur)

Est-ce que je me déplace sur la bonne voie? Et comment puis-je réécrire le code rpy (v1) afin d’obtenir ce que je veux (à partir de rpy2)?

Réponses:

0 pour la réponse № 1

rpy_classic La plupart du temps, la plupart du temps, la société était là pour démontrer que l’interface de niveau inférieur de rpy2 pouvait être utilisée pour mettre en œuvre toute interface de niveau supérieur, y compris celle de rpy. Il ne s'agit pas d'un outil de compatibilité ultime.

Avec l’interface de haut niveau de rpy2 robjects, votre code RPP ressemblerait à ceci:

from rpy2.robjects.packages import importr
from rpy2.robjects import r

lib=importr("<libname>")
rfunc=r("""
function(x,a={options.a},b={options.b})  {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))

out = rfunc(<python expression>).rx2("o")