2

I am trying to run a simple linear regression (using rpy2 from Python) and encountered a strangely worded error when running the script below:

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')

here is the console output:

>>> 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')

I am running Python 2.6.5 and have numpy version 1.6.1

Does any one know what is causing this error?

4

1 に答える 1

1

追加する必要があります:

rpy2.robjects.activate()

インポート後numpy2riこのSO投稿は、rpy2のドキュメントを参照しています。

numpyオブジェクトからrpy2オブジェクトへの自動変換を切り替えるには、そのインポートだけで十分です。

関数py2ri()に含まれている可能性があるのに、なぜこれをオプションのインポートにするのですか(その関数に送信された元のパッチで行われたように)?

どちらも有効で妥当なオプションですが、rpy2をnumpyから最も切り離すために設計が決定されました。また、numpyが自動的にインストールされたために、プログラマーがそれを使用したいとは思わないでください。

これで問題が解決することを願っています。

于 2012-03-25T15:37:03.407 に答える