web-dev-qa-db-fra.com

Appel du script R à partir de python en utilisant rpy2

Je suis très nouveau sur rpy2, ainsi que sur R.

J'ai essentiellement un script R, script.R, qui contient des fonctions, telles que rfunc (dossier). Il se trouve dans le même répertoire que mon script python. Je veux l'appeler à partir de Python, puis lancer l'une de ses fonctions. Je n'ai pas besoin de sortie de cette fonction R. Je sais il doit être très basique, mais je ne trouve pas d'exemples d'appels de script R python codes. Ce que je fais actuellement, en Python:

import rpy2.robjects as robjects

def pyFunction(folder):
    #do python stuff 
    r=robjects.r
    r[r.source("script.R")]
    r["rfunc(folder)"]
    #do python stuff

pyFunction(folder)

Je reçois une erreur sur la ligne avec la source:

r[r.source("script.R")] File "/usr/lib/python2.7/dist-packages/rpy2/robjects/__init__.py", line 226, in __getitem__ res = _globalenv.get(item) TypeError: argument 1 must be string, not ListVector

Je ne comprends vraiment pas comment l'argument que je lui donne n'est pas une chaîne, et je suppose que le même problème se produira alors sur la ligne suivante, avec dossier étant un python = chaîne, et non un truc R.

Alors, comment puis-je appeler correctement mon script?

20
Efferalgan

source est une fonction r, qui exécute un fichier source r. Par conséquent, dans rpy2, Nous avons deux façons de l'appeler:

r['source']("script.R")

ou

r.source("script.R")

r[r.source("script.R")] est une mauvaise façon de le faire.

La même idée peut s'appliquer à la ligne suivante.

25
CT Zhu