(Pythonのrpy2を使用して)単純な線形回帰を実行しようとしていますが、以下のスクリプトを実行すると奇妙な言葉のエラーが発生しました。
from numpy import array, rec
from numpy.random import normal as nprandom
from rpy2.robjects import numpy2ri, r
foo = array(range(10))
bar = foo + nprandom(0,1,10)
d = rec.fromarrays([foo, bar], names=("foo","bar"))
fit = r.lm("bar ~ foo", data=d)
print fit.rx2("coefficients")
コンソール出力は次のとおりです。
>>> from numpy import array, rec
>>> from numpy.random import normal as nprandom
>>> from rpy2.robjects import numpy2ri, r
>>>
>>> foo = array(range(10))
>>> bar = foo + nprandom(0,1,10)
>>>
>>> d = rec.fromarrays([foo, bar], names=("foo","bar"))
>>> fit = r.lm("bar ~ foo", data=d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/rpy2/robjects/functions.py", line 82, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/rpy2/robjects/functions.py", line 33, in __call__
new_kwargs[k] = conversion.py2ri(v)
File "/usr/local/lib/python2.6/dist-packages/rpy2/robjects/__init__.py", line 134, in default_py2ri
raise(ValueError("Nothing can be done for the type %s at the moment." %(type(o))))
ValueError: Nothing can be done for the type <class "numpy.core.records.recarray"> at the moment.
>>> print fit.rx2("coefficients")
Python 2.6.5を実行しており、numpyバージョン1.6.1があります
このエラーの原因を知っている人はいますか?
回答:
回答№1は1あなたは以下を追加する必要があります:
rpy2.robjects.activate()
インポート後 numpy2ri
. このSOの投稿 rpy2ドキュメントを参照します。
そのインポートだけで、自動変換を切り替えるのに十分です numpyオブジェクトからrpy2オブジェクト。
これをオプションのインポートにするのはなぜですか? 関数py2ri()(そのために提出された元のパッチで行われるように 関数) ?
どちらも有効かつ合理的なオプションですが、設計決定 numpyからrpy2を最も分離するために取られましたが、 numpyが自動的にインストールされたことは、 プログラマーはそれを使いたかった。
これがあなたの問題を解決することを願っています。