'ValueError: Ничего нельзя сделать для типа <class' numpy.core.records.recarray '> в данный момент' ошибка - PullRequest
2 голосов
/ 25 марта 2012

Я пытаюсь запустить простую линейную регрессию (используя rpy2 из Python) и обнаружил странно сформулированную ошибку при запуске приведенного ниже сценария:

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 голос
/ 25 марта 2012

Вам необходимо добавить:

rpy2.robjects.activate()

после импорта numpy2ri. Эта публикация SO ссылается на документацию rpy2:

Одного только импорта достаточно для переключения автоматического преобразования numpy объектов в объекты rpy2.

Зачем делать этонеобязательный импорт, хотя он мог бы быть включен в функцию py2ri () (как это было сделано в оригинальном патче, представленном для этой функции)?

Несмотря на то, что оба варианта являются допустимыми и разумными, проектное решение было принято для того, чтобыбольше всего отделите rpy2 от numpy и не думайте, что автоматическая установка numpy означала, что программист хотел использовать его.

Надеюсь, это решит вашу проблему.

...