2012-03-25 6 views
2

Ich versuche, eine einfache lineare Regression (mit rpy2 aus Python) zu tun und stieß auf eine seltsam formulierte Fehler bei Ausführung des Skripts unter:'ValueError: Nichts kann für den Typ <class' numpy.core.records.recarray '> im Moment' Fehler

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

hier ist die Ausgabe der Konsole:

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

ich bin mit Python 2.6.5 und haben numpy Version 1.6.1

jemand weiß, was verursacht th ist ein Fehler?

Antwort

1

Sie müssen hinzufügen:

rpy2.robjects.activate() 

nach numpy2ri importieren. This SO post Referenzen der rpy2 Dokumentation:

That import alone is sufficient to switch an automatic conversion of numpy objects into rpy2 objects.

Why make this an optional import, while it could have been included in the function py2ri() (as done in the original patch submitted for that function) ?

Although both are valid and reasonable options, the design decision was taken in order to decouple rpy2 from numpy the most, and do not assume that having numpy installed automatically meant that a programmer wanted to use it.

Hope this löst Ihr Problem.