Converting an RPy2 ListVector to a Python dictionary

前端 未结 7 1208
日久生厌
日久生厌 2020-12-09 16:46

The natural Python equivalent to a named list in R is a dict, but RPy2 gives you a ListVector object.

import rpy2.robjects as robjects

a = robjects.r(\'list         


        
7条回答
  •  眼角桃花
    2020-12-09 17:37

    Simple R list to Python dictionary:

    >>> import rpy2.robjects as robjects
    >>> a = robjects.r('list(foo="barbat", fizz=123)')
    >>> d = { key : a.rx2(key)[0] for key in a.names }
    >>> d
    {'foo': 'barbat', 'fizz': 123.0}
    

    Arbitrary R object to Python object using R RJSONIO JSON serialization/deserialization

    On R server: install.packages("RJSONIO", dependencies = TRUE)

    >>> ro.r("library(RJSONIO)")
    
    [str, str, str, ..., str, str, str]
    >>> import rpy2.robjects as robjects
    >>> rjson = robjects.r(' toJSON( list(foo="barbat", fizz=123, lst=list(33,"bb")) )  ')
    >>> pyobj = json.loads( rjson[0] )
    >>> pyobj
    {u'lst': [33, u'bb'], u'foo': u'barbat', u'fizz': 123}
    >>> pyobj['lst']
    [33, u'bb']
    >>> pyobj['lst'][0]
    33
    >>> pyobj['lst'][1]
    u'bb'
    >>> rjson = robjects.r(' toJSON( list(foo="barbat", fizz=123, lst=list( key1=33,key2="bb")) )  ')
    >>> pyobj = json.loads( rjson[0] )
    >>> pyobj
    {u'lst': {u'key2': u'bb', u'key1': 33}, u'foo': u'barbat', u'fizz': 123}
    

提交回复
热议问题