2012-03-25 34 views
2

我想运行一个简单的线性回归(使用rpy2从Python),并遇到一个奇怪的措辞运行下面的脚本时出错:'ValueError:没有什么可以做的类型<class'numpy.core.records.recarray'>此刻'错误

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

您需要添加:

rpy2.robjects.activate() 

进口numpy2ri后。 This SO post参考rpy2文档:

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.

希望这可以解决您的问题。

相关问题