/ / 'ValueError:タイプ<class' numpy.core.records.recarray '>に対して現時点では何もできません'エラー-python、r、numpy、rpy2

'ValueError:タイプ<class' numpy.core.records.recarray '>は現時点では何もできません - python、r、numpy、rpy2

(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が自動的にインストールされたことは、 プログラマーはそれを使いたかった。

これがあなたの問題を解決することを願っています。