2016-11-10 23 views
0

我想使用python進行一些計算,並將數組數據放到r中以獲得一些圖。如何使用rpy2從python獲得n-dim數組

對於1維數組,我可以使用FloatVector得到正確的答案,但n維數組錯誤

(運行下面的代碼)

(2維數組)
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中完成所有這些工作。

回答

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