我想用python进行一些计算,并将数组数据放入r中得到一些图。
对于1-dim数组,我可以使用FloatVector来得到正确的答案,但n-dim数组错误
(运行以下代码)
(2-dim数组)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:ProgramAnaconda3libsite-packagesrpy2robjectsvectors.py", line 456, in __init__
obj = FloatSexpVector(obj)
ValueError: Error while trying to convert element 0 to a double.`
使用numpy2ri可能会在某些绘图顺序(如ggplot2)中出错
我想用spyder来做这些
转换机制可以成为您的朋友:
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
,你不能有FloatVector
元素的FloatVector
(你可以有一个FloatVector列表)。显式地,这就是正在发生的事情(您将触发相同的错误):
FloatVector([FloatVector(y) for y in x])