【问题标题】:how to use rpy2 to get n-dim array from python如何使用 rpy2 从 python 获取 n-dim 数组
【发布时间】:2017-03-24 13:35:12
【问题描述】:

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

对于一维数组,我可以使用 FloatVector 得到正确答案,但是 n-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:\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 中完成这些工作。

【问题讨论】:

    标签: python numpy rpy2


    【解决方案1】:

    转换机制可以成为你的朋友:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多