如何使用rpy2从python中获取n-dim数组

时间:2016-11-10 13:39:03

标签: python numpy rpy2

我想使用python进行一些计算,并将数组数据放到r中以得到一些图。

对于1-dim数组,我可以使用FloatVector来获得正确的答案,但是n-dim数组错误

(运行以下代码)

(2-dim array)
   import numpy as np from rpy2.robjects.vectors import FloatVector x = np.array([[1, 2], [3, 4]]) X = FloatVector(x)

错误信息:

`Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "D:\Program\Anaconda3\lib\site-packages\rpy2\robjects\vectors.py",   line 456, in __init__
 obj = FloatSexpVector(obj)
 ValueError: Error while trying to convert element 0 to a double.`

使用numpy2ri可能会在某些绘图顺序中产生错误(例如ggplot2)

我想在spyder中完成所有这些。

1 个答案:

答案 0 :(得分:0)

转换机制可以是你的朋友:

from rpy2.robjects.conversion import localconverter
from rpy2.robjects import numpy2ri

with localconverter(numpy2ri.converter) as cv:
    X = cv.py2ro(x) # convert from *py*thon to *ro*bjects

否则,这种情况正在发生,因为rpy2正在尝试迭代 序列x(没有与numpy交互的默认行为 请求)并通过迭代使每个元素成为R / rpy2对象。 这里它不起作用,因为x[i]转为FloatVector而你不能拥有FloatVectorFloatVector元素(你可以拥有一个FloatVector列表)。显然,这就是正在发生的事情(并且你会触发相同的错误):

FloatVector([FloatVector(y) for y in x])