web-dev-qa-db-ja.com

rpy2を使用してpythonからRスクリプトを呼び出す

Rpyだけでなくrpy2も初めてです。

私は基本的に、Rfunc(folder)などの関数を含むRスクリプトscript.Rを持っています。これは、my pythonスクリプトと同じディレクトリにあります。Pythonから呼び出してから、その関数の1つを起動します。このR関数からの出力は必要ありません。わかっています。それは非常に基本的なものでなければなりませんが、Rスクリプト呼び出しの例を見つけることができませんpythonコード。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)
_

ソースの行でエラーが発生します:

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

私が与えた引数が文字列ではないことを私はまったく理解していません。同じ問題が次の行でも発生すると思いますfolderはpython =文字列であり、Rのものではありません。

では、スクリプトを適切に呼び出すにはどうすればよいでしょうか。

20
Efferalgan

sourcer関数であり、rソースファイルを実行します。したがって、_rpy2_では、次の2つの方法で呼び出すことができます。

_r['source']("script.R")
_

または

_r.source("script.R")
_

r[r.source("script.R")]は、間違った方法です。

同じ考えが次の行にも当てはまる場合があります。

25
CT Zhu