将RPy2 ListVector转换为Python字典

b

相当于R中的命名列表的自然Python是字典,但是RPy2给您一个ListVector对象。

import rpy2.robjects as robjects

a = robjects.r('list(foo="barbat", fizz=123)')

此时,a是ListVector对象。

<ListVector - Python:0x108f92a28 / R:0x7febcba86ff0>
[StrVector, FloatVector]
  foo: <class 'rpy2.robjects.vectors.StrVector'>
  <StrVector - Python:0x108f92638 / R:0x7febce0ae0d8>
[str]
  fizz: <class 'rpy2.robjects.vectors.FloatVector'>
  <FloatVector - Python:0x10ac38fc8 / R:0x7febce0ae108>
[123.000000]

我想拥有的东西可以像普通的Python字典一样对待。我的临时解决方法是:

def as_dict(vector):
    """Convert an RPy2 ListVector to a Python dict"""
    result = {}
    for i, name in enumerate(vector.names):
        if isinstance(vector[i], robjects.ListVector):
            result[name] = as_dict(vector[i])
        elif len(vector[i]) == 1:
            result[name] = vector[i][0]
        else:
            result[name] = vector[i]
    return result

as_dict(a)
{'foo': 'barbat', 'fizz': 123.0}

b = robjects.r('list(foo=list(bar=1, bat=c("one","two")), fizz=c(123,345))')
as_dict(b)
{'fizz': <FloatVector - Python:0x108f7e950 / R:0x7febcba86b90>
 [123.000000, 345.000000],
 'foo': {'bar': 1.0, 'bat': <StrVector - Python:0x108f7edd0 / R:0x7febcba86ea0>
  [str, str]}}

因此,问题是...是否有更好的方法或我应该使用的RPy2内置方法?

CT Zhu

我认为让ar向量进入adictionary并不一定要如此,这是怎么回事:

In [290]:

dict(zip(a.names, list(a)))
Out[290]:
{'fizz': <FloatVector - Python:0x08AD50A8 / R:0x10A67DE8>
[123.000000],
 'foo': <StrVector - Python:0x08AD5030 / R:0x10B72458>
['barbat']}
In [291]:

dict(zip(a.names, map(list,list(a))))
Out[291]:
{'fizz': [123.0], 'foo': ['barbat']}

当然,如果您不介意使用pandas,它甚至更容易。结果将具有,numpy.array而不是list,但是在大多数情况下可以:

In [294]:

import pandas.rpy.common as com
com.convert_robj(a)
Out[294]:
{'fizz': [123.0], 'foo': array(['barbat'], dtype=object)}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将rpy2 ListVector(rpy2.robjects.vectors.ListVector)转换为python?

来自分类Dev

通过rpy2将列表从python传递到R

来自分类Dev

使用rpy2将.RData文件读入python

来自分类Dev

如何将Python函数与rpy2结合?

来自分类Dev

通过rpy2将列表从python传递到R

来自分类Dev

使用rpy2将Python变量传递给R

来自分类Dev

使用 rpy2 将 Python 二进制数据转换为 R

来自分类Dev

rpy2不会将“ _”转换为“”。

来自分类Dev

Rpy2 pandas2ri.ri2py()将NA值转换为整数

来自分类Dev

使用Rpy2将Pandas DataFrame转换为R数据帧

来自分类Dev

使用Rpy2将Pandas DataFrame转换为R数据帧

来自分类Dev

rpy2不会转换回熊猫

来自分类Dev

使用rpy2将.R文件采购到python时出现问题

来自分类Dev

如何在Python代码中使用rpy2将R函数作为参数传递

来自分类Dev

rpy2:如何将向量从 Python 回调函数返回到 R?

来自分类Dev

使用rpy2从python调用R脚本

来自分类Dev

使用rpy2在Python中保存RData工作区

来自分类Dev

使用pip为Python 3安装rpy2

来自分类Dev

具有多个输入参数的 Python RPy2 函数

来自分类Dev

使用rpy2从python动态调用R库

来自分类Dev

使用 rpy2 从 Python 调用 R 函数

来自分类Dev

将HTML字典转换为PYTHON字典

来自分类Dev

将python字典转换为python列表

来自分类Dev

将Python字典转换为Spark DataFrame

来自分类Dev

将python字典转换为sqlite

来自分类Dev

Python 3:将元组转换为字典

来自分类Dev

将XML转换为python字典

来自分类Dev

将嵌套字典转换为元组python

来自分类Dev

将嵌套字典转换为Python对象